Java - 从字符串中删除重复项

Mar*_*lek 0 java regex

我有一个字符串,其中的值列表以分号分隔.我需要一些最佳方法来删除重复项.我有以下正则表达式:

\b(\w+);(?=.*\b\1;?)
Run Code Online (Sandbox Code Playgroud)

这有效,但是当有空格时它会失败.例如,aaa bbb;aaa bbb;aaa bbb创建aaa aaa aaa bbb而不是aaa bbb.

Psh*_*emo 6

可能最简单的解决方案是使用集合 - 不允许重复的集合.在分隔符上拆分字符串,并将其放在set中.

在Java 8中,您的代码可能如下所示:

String result = Stream.of(yourText.split(";"))          //stream of elements separated by ";"
                      .distinct()                       //remove duplicates in stream
                      .collect(Collectors.joining(";"));//create String joining rest of elements using ";"
Run Code Online (Sandbox Code Playgroud)

Pre Java 8解决方案可能如下所示:

public String removeDuplicates(String yourText) {
    Set<String> elements = new LinkedHashSet<>(Arrays.asList(yourText.split(";")));

    Iterator<String> it = elements.iterator();

    StringBuilder sb = new StringBuilder(it.hasNext() ? it.next() : "");
    while (it.hasNext()) {
        sb.append(';').append(it.next());
    }

    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)