Как проверить, содержит ли многострочная строка другую многострочную строку в Java? - PullRequest
0 голосов
/ 04 мая 2020

1. Я пытался использовать функцию содержимого, НО она не работала, она работает только тогда, когда b = "30-10-1960 \ n" или b = "Posephine Esmerelda Bloggs \ n". Как проверить, содержит ли а б? 2. Вот код, который я написал.

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)");

Ответы [ 3 ]

0 голосов
/ 04 мая 2020

все работает, попробуйте это -

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. то, что вы сравниваете, не то же самое. В «а» есть дополнительное слово «день рождения», которое отсутствует в «б».

Правильная последовательность строк, которую я вставил в пример кода.

0 голосов
/ 04 мая 2020

для ответа на вопрос, как найти две части в 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) возвращает indexOf(s.toString()) > -1

0 голосов
/ 04 мая 2020

Я думаю, что логика c, которую вы хотите здесь, состоит в том, чтобы утверждать, что каждая строка строки 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...