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

2022-09-03 09:03:50

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

String s="Bangalore-Chennai-NewYork-Bangalore-Chennai"; 

和输出应该像

String s="Bangalore-Chennai-NewYork-";

使用 Java..

任何帮助将不胜感激。


答案 1

这在一行中完成:

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, ...]
  • 最后的命令从replacetoString()

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

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)", "");
}

答案 2
public static String removeDuplicates(String txt, String splitterRegex)
{
    List<String> values = new ArrayList<String>();
    String[] splitted = txt.split(splitterRegex);
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < splitted.length; ++i)
    {
        if (!values.contains(splitted[i]))
        {
            values.add(splitted[i]);
            sb.append('-');
            sb.append(splitted[i]);
        }
    }
    return sb.substring(1);

}

用法:

String s = "Bangalore-Chennai-NewYork-Bangalore-Chennai";
s = removeDuplicates(s, "\\-");
System.out.println(s);

指纹:

Bangalore-Chennai-NewYork