Как найти подстроку строки с пробелами в Java? - PullRequest
1 голос
/ 15 февраля 2012

Я хочу проверить, содержит ли строка определенную подстроку, и использовать для нее CONTAINS ().

Но здесь проблема с пространством.

Exstr1 = "c not in (5,6)"

Я хочу проверить, содержит ли str NOT IN, поэтому я использую str.contains ("not in") ..

Но проблема в том, что здесь пространство между NOT и IN не определено, т. Е. Также может быть 5 пробелов ..

Как решить, что я могу найти подстроку, не находящуюся между ними, без пробелов между ними ...

Ответы [ 6 ]

6 голосов
/ 15 февраля 2012

Используйте регулярное выражение (Pattern), чтобы получить Matcher для соответствия вашей строке.

Регулярное выражение должно быть "not\\s+in" («не», за которым следует ряд пробелов, а затем «in»):

public static void main(String[] args) {

    Matcher m = Pattern.compile("not\\s+in").matcher("c not  in(5,6)");

    if (m.find())
        System.out.println("matches");
} 

Обратите внимание, что существует метод String с именем matches(String regexp). Вы можете использовать регулярное выражение ".*not\\s+in.*", чтобы получить совпадение, но это не очень хороший способ выполнить сопоставление с образцом.

4 голосов
/ 15 февраля 2012

Вы должны использовать регулярное выражение : "not\\s+in"

    String s = "c not  in(5,6)";
    Matcher matcher = Pattern.compile("not\\s+in").matcher(s);
    System.out.println(matcher.find());

Объяснение: \\s+ означает любой вид пробела [табуляция также приемлема] и должен повторить хотя бы одно [любое число> = 1 будет принято].
Если вам нужны только пробелы, без вкладок измените свое регулярное выражение на "not +in"

2 голосов
/ 15 февраля 2012

Используйте метод String.matches(), который проверяет, соответствует ли строка регулярному выражению ( docs ).

В вашем случае:

String str1 = "c not in(5,6)";
if (str1.matches(".*not\\s+in.*")) {
    // do something
    // the string contains "not in"
}
0 голосов
/ 15 февраля 2012

Без учета регистра: (?i)

Считая символ новой строки также точкой .: (?s)

str1.matches("(?is).*not\\s+in.*")
0 голосов
/ 15 февраля 2012

Пожалуйста, попробуйте следующее,

int result = str1.indexOf ( "not in" );

if ( result != -1 ) 
{
       // It contains "not in" 
}
else if ( result == -1 )
{
     // It does not contain "not in"
}
0 голосов
/ 15 февраля 2012

В общем, вы можете просто сделать это:

if (string.indexOf("substring") > -1)... //It's there
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...