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

时间:2017-09-11 08:28:11

标签: 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,例外。

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

奇怪的是:l1l2被正确定义,如果我只是在定义之后打印它们,值是正确的,交叉点应该是W和{{1也是。

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

S

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

然后它的工作,但如果我使用从String s1 = "A,S"; String s2 = "S"; m1获取值的列表,它不起作用,虽然列表看起来完全相同。

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:3)

只需将字母放入某个描述的Collection(可以是List,如果要放弃重复,可以是Set

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

然后只删除first中不属于second的所有元素(或另一种查看它的方式,仅保留firstsecond中的元素first.retainAll(second); 1}}):

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

现在再次加入他们:

Optional<VendorAddress> maybeAnAddress = vendorAddressList
        .stream()
        .filter(VendorAddress::isPrimary) // Note: I used a method reference here.
        .findAny();
VendorAddress primaryAddress = maybeAnAddress.orElse(null);

答案 1 :(得分:1)

如果没有特定要求对数组使用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));