2013-06-16 6 views
16

Итак, как вы можете проверить, содержит ли строка определенное слово?Чтобы проверить, содержит ли строка определенное слово

Так что это мой код:

a.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      if(d.contains("Hey")){ 
       c.setText("OUTPUT: SUCCESS!"); 
      }else{ 
       c.setText("OUTPUT: FAIL!"); 
      } 
     } 
    }); 

Я получаю сообщение об ошибке.

+0

Читайте о регулярных выражениях (RegEx) для получения дополнительной информации. – Lingviston

+2

Проверка часть похоже прекрасный. Какая ошибка? –

+3

Какая ошибка? Что такое 'd'? Что такое 'c'? –

ответ

28

Не так сложно, как говорится, проверьте это, вы не пожалеете.

String sentence = "Check this answer and you can find the keyword with this code"; 
String search = "keyword"; 

if (sentence.toLowerCase().indexOf(search.toLowerCase()) != -1) { 

    System.out.println("I found the keyword"); 

} else { 

    System.out.println("not found"); 

} 

Вы можете изменить toLowerCase(), если вы хотите.

+0

Благодарим вас за ответ fthopkins.Это старый вопрос, но сегодня я столкнулся с подобной ситуацией. Вышеупомянутый код ищет charsequence, а не слово. Например: - Если мы хотим поймать только «ключевое слово», а не любые расширения, такие как «keyword_1», приведенный выше код не будет работать. Одним из способов избежать этого может быть поиск с помощью String для функции «ключевое слово» (обратите внимание на два пробела с каждой стороны) - есть ли более элегантный способ сделать это? – JavaTec

+1

@JavaTec вам нужно будет использовать регулярное выражение для правильного поиска слов. Подобно ответу m0skit0 (и см. Этот ответ для использования скомпилированных выражений, если вы используете одно и то же выражение снова и снова), вы захотите сделать это: 'if (d.matches (" \\ bkeyword \\ b ")) {/* успех * /} '. '\ b' (' \\ b' в строке, чтобы избежать обратного слэша) соответствует «границе слова», т. е. кромки слова. Преимущество использования пробелов заключается в том, что оно будет правильно соответствовать вещам типа «предложение с ключевым словом». (полная остановка вместо пространства) или даже «ключевое слово» (без пробела в начале или конце). –

+1

Спасибо @LoganPickup - в конце концов я использовал '\\ b' (тогда в октябре), и все получилось отлично. – JavaTec

4

Вы можете использовать регулярные выражения:

if (d.matches(".*Hey.*")) { 
    c.setText("OUTPUT: SUCCESS!"); 
} else { 
    c.setText("OUTPUT: FAIL!"); 
} 

.* -> 0 или более любых символов

Hey -> Строка вы хотите

Если вы будете проверять это часто, это лучше скомпилировать регулярное выражение в объекте Pattern и повторно использовать экземпляр Pattern для проверки.

private static final Pattern HEYPATTERN = Pattern.compile(".*Hey.*"); 
[...] 
if (HEYPATTERN.matcher(d).matches()) { 
    c.setText("OUTPUT: SUCCESS!"); 
} else { 
    c.setText("OUTPUT: FAIL!"); 
} 

Просто заметьте это будет также соответствовать "Heyburg" к примеру, так как вы не указали вы ищете "Hey" в качестве самостоятельного слова. Если вы хотите, чтобы соответствовать Hey как слово, вам необходимо изменить регулярное выражение.*\\bHey\\b.*

+0

О, мой плохой. Я забыл d = b.getText(). ToString(); часть. – WhiplashOne

+0

Я думаю, вы намерены написать этот комментарий как комментарий ** по вашему вопросу **. – m0skit0

+0

@ m0skit0 мы можем сделать это, проигнорировав случай, т. Е. Я хочу совместить, если предложение содержит андроид/Android, оно должно возвращать true. –

9

.contains() отлично действуют и хороший способ проверить.

(http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#contains(java.lang.CharSequence))

Поскольку вы не отправляли ошибку, я думаю d либо нулевой или вы получаете «не может относиться к неконечному переменному внутри внутреннего класса, определенный в другом методе» ошибка.

Чтобы убедиться, что это не null, сначала проверьте значение null в инструкции if. Если это другая ошибка, убедитесь, что d объявлен как final или является переменной-членом вашего класса. То же для c.

0
if (someString.indexOf("Hey")>=0) 
    doSomething(); 
1

Использование содержит

String sentence = "Check this answer and you can find the keyword with this code"; 
String search = "keyword"; 

if (sentence.toLowerCase().contains(search.toLowerCase()) { 

    System.out.println("I found the keyword"); 

} else { 

    System.out.println("not found"); 

} 
Смежные вопросы