从Java中的String中删除重复项

Ric*_*cco 16 java string

我试图迭代一个字符串,以删除重复字符.

例如,字符串aabbccdef应该成为abcdef ,字符串abcdabcd应该成为abcd

这是我到目前为止:

public class test {

    public static void main(String[] args) {

        String input = new String("abbc");
        String output = new String();

        for (int i = 0; i < input.length(); i++) {
            for (int j = 0; j < output.length(); j++) {
                if (input.charAt(i) != output.charAt(j)) {
                    output = output + input.charAt(i);
                }
            }
        }

        System.out.println(output);

    }

}
Run Code Online (Sandbox Code Playgroud)

做这个的最好方式是什么?

Dav*_*ave 43

将字符串转换为char数组,并将其存储在一个LinkedHashSet.这将保留您的订购,并删除重复.就像是:

String string = "aabbccdefatafaz";

char[] chars = string.toCharArray();
Set<Character> charSet = new LinkedHashSet<Character>();
for (char c : chars) {
    charSet.add(c);
}

StringBuilder sb = new StringBuilder();
for (Character character : charSet) {
    sb.append(character);
}
System.out.println(sb.toString());
Run Code Online (Sandbox Code Playgroud)


Fun*_*hor 13

使用Stream可以很容易。

noDuplicates = Arrays.asList(myString.split(""))
                     .stream()
                     .distinct()
                     .collect(Collectors.joining());
Run Code Online (Sandbox Code Playgroud)

以下是有关 Stream 的更多文档以及您可以使用它执行的所有操作:https : //docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html

“描述”部分对 Streams 的好处非常有指导意义。


小智 6

试试这个简单的解决方案:

public String removeDuplicates(String input){
    String result = "";
    for (int i = 0; i < input.length(); i++) {
        if(!result.contains(String.valueOf(input.charAt(i)))) {
            result += String.valueOf(input.charAt(i));
        }
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,但是每次运行“+=”时,整个字符串都会被销毁并重新复制,从而导致不必要的低效率。另外,在循环的每次迭代中测试字符串的 length() 也会导致效率低下。循环的长度不会改变,因此您不必检查每个字符。 (2认同)

Ara*_*ram 5

我会使用LinkedHashSet的帮助.删除重复(因为我们使用Set,维护顺序,因为我们使用链表impl).这是一种肮脏的解决方案.甚至可能有更好的方法.

String s="aabbccdef";
Set<Character> set=new LinkedHashSet<Character>();
for(char c:s.toCharArray())
{
    set.add(Character.valueOf(c));
}
Run Code Online (Sandbox Code Playgroud)