我有一个辅助函数,可以在String中查找重复字符的索引。 现在最好的方法是删除这些重复项? 谢谢!
答案 0 :(得分:1)
这是我所知道的最佳方式。它需要一个字符串,将其分成字符,将其放入一个hashset(非重复,有序)然后打印(或者可以返回字符串。
这是列出
的最佳方法String example = "thiscode";
char[] chars = example.toCharArray();
Set<Character> str = new LinkedHashSet<Character>();
for (char c : chars) {
str.add(c);
}
StringBuilder sb = new StringBuilder();
for (Character character : str) {
sb.append(character);
}
System.out.println(sb.toString());
可替换地:
public static String convert(String example){
char[] chars = example.toCharArray();
Set<Character> str = new LinkedHashSet<Character>();
for (char c : chars) {
str.add(c);
}
StringBuilder sb = new StringBuilder();
for (Character character : str) {
sb.append(character);
}
return sb.toString();
}
另一种方法:
String example = "thiscode";
StringBuilder sb = new StringBuilder(example);
for (int i=0; i<example.length(); i++) //itterate throught the characters
if (!sb.toString().contains(example.charAt(i) + "")) //determine if its in the stringbuilder
sb.append(example.charAt(i)); //if not add it
example = sb.toString(); //take result
System.out.println(example);
低效但易于实施
String example = "thiscode";
String empty = "";
boolean alphabet[] = new boolean[26];
for (char c : example.toCharArray())
if (alphabet[(int) ((c + "").toLowerCase().charAt(0) - 'a')] == false)
empty += c;
example = empty;
System.out.println(example);
希望这有帮助。
答案 1 :(得分:1)
您可以创建一组使用的字符并使用add方法,因为如果该集合已经包含列出的值,则返回false,没有理由多次循环元素
String input = "somesortoftestwords";
Set<Character> charSet = new HashSet<Character>();
StringBuilder sb = new StringBuilder();
for (char c : input.toCharArray()) {
if (charSet.add(c)){
sb.append(c);
}
}
System.out.println(sb.toString());
答案 2 :(得分:0)
另一种可能的解决方案:
将字符串转换为字符
char [] charz = inputString.toCharArray();
对字符进行排序
Arrays.sort(charz);
现在使用循环并检查重复项
答案 3 :(得分:0)
在其中一个答案的评论中,有人谈到从StringBuilder中删除字符而没有变化的索引导致问题。所以我写了这个。我并不是说这是处理String的最佳方法。我会使用Linked Set解决方案或类似的东西。 (所以不要拒绝投票 - 或者说不管怎么说:)
这里我们循环StringBuilder长度为-1并检查所有字符后复制并删除它们。我们只去-1,因为最后一个char在检查之后没有任何东西。 len-1计算每次都在for循环中完成,因此当删除字符时它不能运行。
public String removeDuplicates(String string) {
StringBuilder stringBuilder = new StringBuilder(string);
for (int x=0;x<stringBuilder.length()-1;x++) {
String character = Character.toString(stringBuilder.charAt(x));
int i;
while ((i = stringBuilder.indexOf(character, x+1)) != -1) {
stringBuilder.replace(i, i+1, "");
}
}
return stringBuilder.toString();
}