如何检查多行字符串是否包含 Java 中的另一个多行字符串?
How to check If a multiline String contains another multiline String in Java?
1.I 尝试使用 contains 函数但它不起作用,它仅在 b = "30-10-1960\n" 或 b = "Posephine Esmerelda Bloggs\n" 时起作用。如何检查a是否包含b?
2.Here是我写的代码
String a = "name Posephine Esmerelda Bloggs\n" +
"birthday 30-10-1960\n" +
"address 102 Smith St, Summer hill, NSW 2130\n" +
"";
String b = "Posephine Esmerelda Bloggs\n" +
"30-10-1960\n";
System.out.println("a.contains(b)");
我认为您在这里想要的逻辑是断言 b
字符串的每个 行 出现在 a
字符串的某处:
String a = "name Posephine Esmerelda Bloggs\n" +
"birthday 30-10-1960\n" +
"address 102 Smith St, Summer hill, NSW 2130\n" +
"";
String b = "Posephine Esmerelda Bloggs\n" +
"30-10-1960\n";
String[] lines = b.split("\n");
// now check each line
boolean all = true;
for (String line : lines) {
if (!a.contains(line)) {
all = false;
break;
}
}
if (all) {
System.out.println("MATCH");
}
else {
System.out.println("NO MATCH");
}
这会打印:
MATCH
它有效试试这个 -
String a = "name Posephine Esmerelda Bloggs\n" +
"birthday 30-10-1960\n" +
"address 102 Smith St, Summer hill, NSW 2130\n" +
"";
String b = "Posephine Esmerelda Bloggs\n" +
"birthday 30-10-1960\n";
System.out.println(a.contains(b));
您的代码中存在一些问题 -
1. 你在 println 方法中用作字符串文字,它必须是引用。
2.你比较的是不一样的。在 'a' 中,'b' 中缺少一个额外的单词 'birthday'。
我在示例代码中粘贴的正确字符串序列。
关于如何在 b
中找到两个部分的问题的答案
String[] arr = b.split( "\n" );
int pos = a.indexOf( arr[0] + '\n' );
if( pos > -1 && a.indexOf( arr[1] + '\n', pos ) > -1 )
System.err.println( "found" );
+ '\n'
:仅查找以 \n
结尾的部分
如果检查结束 '\n'
是不必要的删除两个 + '\n'
如果部件可能是无序的,则可以省略 pos
参数
不检查末尾的 \n
或所选解决方案中的顺序
String[] arr = b.split( "\n" );
if( a.indexOf( arr[0] ) > -1 && a.indexOf( arr[1] ) > -1 )
System.err.println( "found" );
不检查的解决方案与以下相同
if( a.contains( arr[0] ) && a.contains( arr[1] ) )
System.err.println( "found" );
…因为 contains(s)
returns indexOf(s.toString()) > -1
1.I 尝试使用 contains 函数但它不起作用,它仅在 b = "30-10-1960\n" 或 b = "Posephine Esmerelda Bloggs\n" 时起作用。如何检查a是否包含b? 2.Here是我写的代码
String a = "name Posephine Esmerelda Bloggs\n" +
"birthday 30-10-1960\n" +
"address 102 Smith St, Summer hill, NSW 2130\n" +
"";
String b = "Posephine Esmerelda Bloggs\n" +
"30-10-1960\n";
System.out.println("a.contains(b)");
我认为您在这里想要的逻辑是断言 b
字符串的每个 行 出现在 a
字符串的某处:
String a = "name Posephine Esmerelda Bloggs\n" +
"birthday 30-10-1960\n" +
"address 102 Smith St, Summer hill, NSW 2130\n" +
"";
String b = "Posephine Esmerelda Bloggs\n" +
"30-10-1960\n";
String[] lines = b.split("\n");
// now check each line
boolean all = true;
for (String line : lines) {
if (!a.contains(line)) {
all = false;
break;
}
}
if (all) {
System.out.println("MATCH");
}
else {
System.out.println("NO MATCH");
}
这会打印:
MATCH
它有效试试这个 -
String a = "name Posephine Esmerelda Bloggs\n" +
"birthday 30-10-1960\n" +
"address 102 Smith St, Summer hill, NSW 2130\n" +
"";
String b = "Posephine Esmerelda Bloggs\n" +
"birthday 30-10-1960\n";
System.out.println(a.contains(b));
您的代码中存在一些问题 - 1. 你在 println 方法中用作字符串文字,它必须是引用。 2.你比较的是不一样的。在 'a' 中,'b' 中缺少一个额外的单词 'birthday'。
我在示例代码中粘贴的正确字符串序列。
关于如何在 b
String[] arr = b.split( "\n" );
int pos = a.indexOf( arr[0] + '\n' );
if( pos > -1 && a.indexOf( arr[1] + '\n', pos ) > -1 )
System.err.println( "found" );
+ '\n'
:仅查找以 \n
结尾的部分
如果检查结束 '\n'
是不必要的删除两个 + '\n'
如果部件可能是无序的,则可以省略 pos
参数
不检查末尾的 \n
或所选解决方案中的顺序
String[] arr = b.split( "\n" );
if( a.indexOf( arr[0] ) > -1 && a.indexOf( arr[1] ) > -1 )
System.err.println( "found" );
不检查的解决方案与以下相同
if( a.contains( arr[0] ) && a.contains( arr[1] ) )
System.err.println( "found" );
…因为 contains(s)
returns indexOf(s.toString()) > -1