从java中的字符串中删除重复值

SSG*_*SSG 14 java string duplicates duplicate-removal

任何人都可以让我知道如何从中删除重复值

String s="Bangalore-Chennai-NewYork-Bangalore-Chennai"; 
Run Code Online (Sandbox Code Playgroud)

和输出应该是这样的

String s="Bangalore-Chennai-NewYork-";
Run Code Online (Sandbox Code Playgroud)

使用Java ..

任何帮助,将不胜感激.

Boh*_*ian 36

这是一行:

public String deDup(String s) {
    return new LinkedHashSet<String>(Arrays.asList(s.split("-"))).toString().replaceAll("(^\\[|\\]$)", "").replace(", ", "-");
}

public static void main(String[] args) {
    System.out.println(deDup("Bangalore-Chennai-NewYork-Bangalore-Chennai"));
}
Run Code Online (Sandbox Code Playgroud)

输出:

Bangalore-Chennai-NewYork
Run Code Online (Sandbox Code Playgroud)

请注意,订单已保留:)

要点是:

  • split("-") 给出了不同的值作为数组
  • Arrays.asList() 将数组转换为List
  • LinkedHashSet保留唯一性插入顺序 - 它完成了为我们提供唯一值的所有工作,这些值通过构造函数传递
  • toString()列表是[element1, element2, ...]
  • 最后的replace命令从中删除"标点符号"toString()

此解决方案要求值不包含字符序列", "- 这是对此类简洁代码的合理要求.

Java 8更新!

当然是1行:

public String deDup(String s) {
    return Arrays.stream(s.split("-")).distinct().collect(Collectors.joining("-"));
}
Run Code Online (Sandbox Code Playgroud)

正则表达式更新!

如果您不关心保留顺序(即可以删除第一次出现的重复):

public String deDup(String s) {
    return s.replaceAll("(\\b\\w+\\b)-(?=.*\\b\\1\\b)", "");
}
Run Code Online (Sandbox Code Playgroud)