如何从Java中的字符串中删除重复项?

问题描述:

我在Java中如何从Java中的字符串中删除重复项?

String s1 = "Chicago/London/London/London/Paris"; 
String s2 = "London/London/London/Paris"; 
String s3 = "Prague/London/London/London"; 
String s4 = "London/London"; 

这些字符串我应该在的replaceAll功能使用哪个正则表达式来从做“芝加哥/伦敦/巴黎”,“伦敦/巴黎”,“布拉格/伦敦”和“伦敦”这些字符串?非常感谢你

+5

你尝试过什么做的?为什么你认为正则表达式是正确的工具呢? – UnholySheep

+0

从它看起来,Java String不是存储它的最佳方式。一个想法是分割它,把它放到一个Set中,从而自动消除重复项,并且,如果你真的需要这个作为一个字符串,使用'/'再次加入它。 –

+0

这样的事情会做到这一点: new ArrayList (new HashSet (Arrays.asList(s1.split(“/”)))) – ronhash

你将不得不自己处理。 编辑:根据@ UnholySheep的评论进行了优化。 编辑:继@ Pshemo的评论,两个Java 7/8版本都得到了改进。

public String removeDubs(String input) { 
    String[] parts = input.split("/"); 
    Set<String> unique = new LinkedHashSet<>(Arrays.asList(parts)); 
    return String.join("/", unique); 
} 

编辑:或者,如果您使用的是Java 8:

public String removeDubsV8(String input) { 
    return Arrays.stream(input.split("/")) 
      .distinct() 
      .collect(Collectors.joining("/")); 
} 
+1

'StringBuilder'(和'substring')的用法是不必要的,你可以做'String.join(“/”,unique);'而不是 – UnholySheep