只需一行即可:
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"));}输出:
Bangalore-Chennai-NewYork
请注意,订单已保留:)
关键点是:
split("-")给我们不同的值作为数组Arrays.asList()
把数组变成一个列表linkedHashSet
保留唯一性 和 插入顺序-它完成为我们提供唯一值的所有工作,这些值通过构造函数传递- 该
toString()
列表是[element1, element2, ...]
- 最后的
replace
命令从toString()
此解决方案要求这些值不包含字符序列
", ",这是此类简洁代码的合理要求。
Java 8更新!
当然是1行:
public String deDup(String s) { return Arrays.stream(s.split("-")).distinct().collect(Collectors.joining("-"));}正则表达式更新!
如果您不关心保留顺序(即可以删除第 一次 出现的重复项):
public String deDup(String s) { return s.replaceAll("(\b\w+\b)-(?=.*\b\1\b)", "");}


