java - java中从ArrayList中删除 "regex duplicates"

标签 java arraylist

我想在java中“清理”一个ArrayList,这是解释

假设我们有这个列表:

a = ["a_12_b", "a_13_b", "a_13bis_b", "a_14_b", "a_14_new_b"]

在此列表中,“a_13bis_b”“a_14_new_b” 被视为重复项,为什么?因为每个条目都有这个正则表达式:a_“a string with a lenght =2”_b

输出应该是:

a = ["a_12_b", "a_13_b", "a_14_b"]

我使用了这个简单的代码,但它返回错误的输出:

for (int j = 0; j < list.size(); j++) {
            //basically clean entry will remove the a_ and _b
            String value1= cleanEntry(list.get(j));
            for (int k = 0; k < list.size(); k++) {
                    String value2= cleanEntry(list.get(k));
                    if (k != j && value1.equalsIgnoreCase(value2)) {
                        duplicates.add(list.get(k))
                        list.remove(k);
                    }
            }
}

有什么帮助吗?

最佳答案

您可以使用流映射方法和正则表达式将字符串“规范化”为通用格式,然后创建一组规范化字符串。

类似这样的事情:

List<String> a = Arrays.asList("a_12_b", "a_13_b", "a_13bis_b", "a_14_b", "a_14_new_b");
Set<String> uniques = a.stream()
                .map(s -> s.replaceAll("^([a-z]_\\d{2})[^\\d].+(_[a-z])$", "$1$2"))
                .collect(Collectors.toSet());
System.out.println(uniques);

打印:

[a_14_b, a_13_b, a_12_b]

Java 7、6 的解决方案:

List<String> a = Arrays.asList("a_12_b", "a_13_b", "a_13bis_b", "a_14_b", "a_14_new_b");
Set<String> set = new LinkedHashSet<>();
for(String s : a) {
    set.add(s.replaceAll("^([a-z]_\\d{2})[^\\d].+(_[a-z])$", "$1$2"));
}
System.out.println(set);

结果:

[a_12_b, a_13_b, a_14_b]

如果需要超过 2 个数字字符,可以更改正则表达式。这是一个结果示例:

List<String> a = Arrays.asList("a_12345678901234567890123456_b", "a_13345678901234567890123456_b",
                "a_13345678901234567890123456bis_b", "a_14345678901234567890123456_b", "a_14345678901234567890123456_new_b");
Set<String> set = new LinkedHashSet<>();
for(String s : a) {
    set.add(s.replaceAll("^([a-z]_\\d{26})[^\\d].+(_[a-z])$", "$1$2"));
}
System.out.println(set);

结果:

[a_12345678901234567890123456_b, a_13345678901234567890123456_b, a_14345678901234567890123456_b]

关于java - java中从ArrayList中删除 "regex duplicates",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44803330/

相关文章:

java - Java\Android 中的 ArrayList 性能

java - BlockingObservable.last() 什么时候返回?

java - 为什么我得到 : java. lang.NullPointerException?

java - 将文本添加到另一个类的标签 - 简单的逻辑问题

java - ArrayList 初始化等价于数组初始化

ArrayList处理中的java.util.ConcurrentModificationException

java - Spark集群与Spark客户端

java - 比较通用项目?

java - 如何退出这个循环呢?

java - 来自对象的 ArrayList 和对象的特定名称