检查String是否包含其他字符串Java的一部分

时间:2017-09-08 07:30:59

标签: java arrays string

我在Java应用程序中定义了一些字符串,如下所示:

 m3 = "T, V, E";
 m2 = "T, W, E";

作为一个例子。

现在我需要检查字符串的哪些部分匹配。所以在这种情况下,我想要一个包含m4的字符串T, E作为结果。

在这种情况下例如:

m1 = "A, S";
m3 = "T, V, E";

我想要一个空的(但声明的)字符串。

或者有更好的方法,用另一种方法然后使用字符串吗?我实际上是手工宣布这些字符串。阵列会更好吗?如果是,我怎么能用数组呢?

6 个答案:

答案 0 :(得分:4)

在Java 8中,您可以按以下步骤操作:

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

    List<String> l1 = Arrays.asList(s1.split(","));
    List<String> l2 = Arrays.asList(s2.split(","));

    List<String> result = l1.stream().filter(l2::contains).collect(Collectors.toList());

    System.out.println(String.join(",", result));

结果是预期的“T,E”。

答案 1 :(得分:1)

您可以通过多种方式实现这一目标。其中一种方法是使用设置

首先,用(逗号)分割 m1 字符,然后将其添加到 HashSet 。然后拆分 m2 字符并将其添加到 ArrayList 。现在通过for循环尝试将 ArrayList 字符添加到 HashSet 。如果没有添加(因为角色已经存在),你将从add方法(subprocess)得到错误。如果你得到假打印字符或将其添加到另一个ArrayList。

Set.add()

结果将是T和E

答案 2 :(得分:1)

适当的数据结构是Set。

    Set<String> m3 = new TreeSet<>();
    Collections.addAll(m3, "T", "V", "E");
    Collections.addAll(m3, "T, V, E".split(",\\s*")); // Alternatively.

    Set<String> m2 = new HashSet<>();
    Collections.addAll(m2, "T", "W", "E");

    Set<String> m5 = new TreeSet<>(m2);
    m5.retainAll(m3);

Java 9:

    Set<String> m3 = Set.of("T", "V", "E");
    Set<String> m2 = Set.of("T", "W", "E");

答案 3 :(得分:0)

如果所有String都遵循此模式:..., ..., ....,则可以拆分它们并仅过滤两个数组中包含的每个字符串。
然后,您可以将它们收集到List并与,

一起加入
List<String> commonStrings = Arrays.stream(m2.split(",\\s"))
      .flatMap(s-> Arrays.stream(m3.split(",\\s"))
      .filter(s2.equals(s)))          
      .collect(Collectors.toList());

String joinedString = String.join(",", commonStrings);

请注意,此代码并未返回两个String中确切出现的等号数。
因此,如果一个String包含两个A而另一个A,则结果中会得到两个A。 如果它没有&#39;问题而且您希望仅获得不同的String,您可以在distinct()之前调用collect()

否则,在处理期间,只要消耗String部分(例如A),就返回确切的等于出现次数,因为两个部分在两个String中相等s,您可以从实际的String创建新的String,但要删除此String部分。

答案 4 :(得分:0)

您可以将split()函数用作以下

String a="A, B, C, D";
        String b="B, C, D";
        String[] a_chars =a.split(", "); //returns array with A B C D
        String[] b_chars =b.split(", "); //returns array with B C D

这个你有2个字符串数组,现在你可以用2(for)循环来比较它们

String result="";
        for(int c=0;c<a_chars.length;c++)
        {
            for(int d=0;d<b_chars.length;d++)
            {
                if(a_chars[c].equals(b_chars[d]))
                {
                    result+=a_chars[c]+", ";
                }
            }
        }

现在你有了像result="B, C, D, "

这样的结果字符串

检查结果长度是否大于零 如果是,则删除,

的lase 2个字符
if(result.length()>0)result=result.substring(0,result.length()-2);

如果结果字符串的长度为零,则表示没有匹配的字母,因此无需修改

答案 5 :(得分:0)

String s1 =&#34; T,V,E&#34 ;;     字符串s2 =&#34; T,W,E&#34 ;;

List<String> l1 = Arrays.asList(s1.split(","));
List<String> l2 = Arrays.asList(s2.split(","));

List<String> result = l1.stream().filter(l2::contains).collect(Collectors.toList());

System.out.println(String.join(",", result));

结果= T&amp; E. 我也会告诉你这个很好的答案