[英]Java - check intersection of two strings
我有一种方法来检查两个字符串的开头,这些字符串都是用逗号分隔的字符。
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
,除外。
但是使用我提供的代码无法正常工作,因此只能得到字符串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
在second
的元素):
first.retainAll(second);
现在再次加入他们:
String intersection = String.join(",", first);
如果没有使用特定的要求for
循环使用数组,那么我会用集合和库的方法来实现这一目标,例如:
String s1 = "T,V,E";
String s2 = "T,W,E";
List<String> list1 = new ArrayList<>(Arrays.asList(s1.split(",")));
List<String> list2 = new ArrayList<>(Arrays.asList(s2.split(",")));
list1.retainAll(list2);
System.out.println(String.join(",", list1));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.