任何人都可以建议我如何从 java 中的字符串中删除重复字符,并且不使用字符串函数。
据我所知,我们将给定的字符串转换为字符数组,然后我们可以使用 TreeSet 来删除重复项。但 ToCharArray 又是一个字符串函数。
Scanner
来读取该字符串,就像您通过流读取它一样。
String input = "Hello World";
Scanner scanner = new Scanner(input);
scanner.useDelimiter("");
while(scanner.hasNext()) {
System.out.println(scanner.next());
}
产量:
H
e
l
l
o
W
o
r
l
d
所有其他答案都通过使用其他类(例如 StringBuilder 或 Scanner)来绕过 String 方法的使用。然而,它们仍然使用 String 方法,尽管是间接的,因为这些其他类本身也使用 String 方法。我的解决方案有点“顽皮”并且特定于jdk,但至少它根本不使用任何 String 方法:
String s = "hello";
Class<String> c = (Class<String>) Class.forName("java.lang.String");
Field f = c.getDeclaredField("value");
f.setAccessible(true);
char[] array = (char[]) f.get(s);
...然后完全在数组上进行处理。
看,没有使用 String 方法! ;-)
charAt 和 length 来自接口 CharSequence
因此,请使用 StringBuilder 并使用它的这些方法的实现。
StringBuilder sb = new StringBuilder("My My My");
并使用
sb.length()
结合
sb.chartAt(index);
您可以迭代字符串构建器来识别重复项,并使用删除它们
sb.deleteCharAt(index_of_char_to_delete);
这个怎么样?
String str = "eyyigwdqweqe";
StringBuilder builder = new StringBuilder(str);
HashSet<String> mySet = new HashSet<String>();
for(int i = 0; i<builder.length();i++)
mySet.add(builder.charAt(i)+"");
System.out.println(mySet);
public class RemoveDuplicates {
public static void main(String[] args) {
String input = new String("Geeksforgeeks");
String output = new String();
boolean isPresent;
if (input.length()==0){
System.out.println("Input String Empty. Program Terminated");
}
else {
//read each character of input string
for (int i = 0; i < input.length(); i++) {
isPresent=false;
//read through entire output string
for (int j = 0; j < output.length(); j++) {
//check if character exists in output string then set flag
if (Character.toLowerCase(input.charAt(i)) == Character.toLowerCase(output.charAt(j))) {
isPresent = true;
break;
}
}//for
//if flag is false means character is not dduplicated then add to output string
if (!isPresent) {
output += input.charAt(i);
}//if
}//end of input string loop
System.out.println("Original input : "+input);
System.out.println("Final output : "+output);
}
}//main
}//class
您可以使用 slice() 函数删除字符串左侧的字符。
var string='测试自动化';
var stringfinal=string.slice(4); cy.log(stringfinal)
输出:自动化