我有一个字符串,其中的值列表以分号分隔.我需要一些最佳方法来删除重复项.我有以下正则表达式:
\b(\w+);(?=.*\b\1;?)
Run Code Online (Sandbox Code Playgroud)
这有效,但是当有空格时它会失败.例如,aaa bbb;aaa bbb;aaa bbb创建aaa aaa aaa bbb而不是aaa bbb.
可能最简单的解决方案是使用集合 - 不允许重复的集合.在分隔符上拆分字符串,并将其放在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)