gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:54:45 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com