如何检查多行字符串是否包含 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