Java - 检查两个字符串的交集

标签 java string

我有一种方法来检查两个字符串的插入,这两个字符串都是字符,用逗号分隔。

if(brauen[p] > 35){
                m1 = "A, S";
            }else if(brauen[p] <=35 && brauen[p]>20){
                m1 = "T";
            }else{
                m1 = "W";
            }
            if(mund[p] > 50){
                m2 = "S";
            }else{
                m2 = "T, W, E";
            }
            if(augen[p] > 25){
                m3 = "A, S";
            }else{
                m3 = "T, V, E";
            }

            List<String> l1 = Arrays.asList(m1.split(","));
            List<String> l2 = Arrays.asList(m2.split(","));
            List<String> l3 = Arrays.asList(m3.split(","));
            List<String> result = l1.stream().filter(l2::contains).collect(Collectors.toList());
            resultString = String.join(",", result);
            System.out.println(resultString);

该代码位于 for 循环中,迭代数组。

我现在不明白的是:如果我定义单个字符串(如上面三个列表的定义),如下所示:

 String s1 = "T,V,E";
 String s2 = "T,W,E";

然后它开始工作,结果是 T,E,异常(exception)。

但是我提供的代码不起作用,我只得到字符串 T 或空字符串作为结果。

奇怪的事情:l1l2 定义正确,如果我只是在定义后打印它们,则值是正确的,并且交集应该是 WS 也是如此。

所以我真的找不到任何问题,如果我基本上定义上面相同的字符串,就像我说的,所以:

String s1 = "T,V,E";
 String s2 = "T,W,E";

String s1 = "A,S";
 String s2 = "S";

然后它就可以工作,但是如果我使用从 m1m2 获取值的列表,它就不起作用,尽管列表看起来完全相同。

有人可以帮我吗?

最佳答案

只需将字母放入某个描述的Collection中(可以是List,如果您想丢弃重复项,可以是Set):

Set<String> first = new LinkedHashSet<>(Arrays.asList(s1.split(","));
Set<String> second = new LinkedHashSet<>(Arrays.asList(s2.split(","));

然后删除 first 中不在 second 中的所有元素(或者,另一种看待它的方式,只保留 first 中的元素 位于第二个):

first.retainAll(second);

现在再次加入他们:

String intersection = String.join(",", first);

关于Java - 检查两个字符串的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46151252/

相关文章:

c - 如何分配内存来存储 5 个名字而不浪费甚至 1 个字节

c# - 清理 URL 中的外来字符/口音

c - 如何从文件中获取替代行并将其作为字符串存储到结构中?

c++ - C/C++ strcpy 未处理的读取冲突

java - 如何使用Array而不是ArrayList来添加单词?

java - 检查Android设备是否有代码中的某个硬件按钮

java - 如何修复以下代码以便获得输出的反向链表?

java - 语法错误: insert } to complete ClassBody - Eclipse

java - Java Protocol Buffers 能否在重复字段的列表 getter 上返回 null?

MySQL 前导 0 的日期格式