我有一种方法来检查两个字符串的插入,这两个字符串都是字符,用逗号分隔。
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
或空字符串作为结果。
奇怪的事情:l1
和 l2
定义正确,如果我只是在定义后打印它们,则值是正确的,并且交集应该是 W
和 S
也是如此。
所以我真的找不到任何问题,如果我基本上定义上面相同的字符串,就像我说的,所以:
String s1 = "T,V,E";
String s2 = "T,W,E";
或
String s1 = "A,S";
String s2 = "S";
然后它就可以工作,但是如果我使用从 m1
和 m2
获取值的列表,它就不起作用,尽管列表看起来完全相同。
有人可以帮我吗?
最佳答案
只需将字母放入某个描述的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/