我在Java应用程序中定义了一些字符串,如下所示:
m3 = "T, V, E";
m2 = "T, W, E";
作为一个例子。
现在我需要检查字符串的哪些部分匹配。所以在这种情况下,我想要一个包含m4
的字符串T, E
作为结果。
在这种情况下例如:
m1 = "A, S";
m3 = "T, V, E";
我想要一个空的(但声明的)字符串。
或者有更好的方法,用另一种方法然后使用字符串吗?我实际上是手工宣布这些字符串。阵列会更好吗?如果是,我怎么能用数组呢?
答案 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, "
检查结果长度是否大于零
如果是,则删除,
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. 我也会告诉你这个很好的答案