2013-06-16 18 views
16

Jak sprawdzić, czy ciąg zawiera konkretne słowo?Aby sprawdzić, czy ciąg zawiera określone słowo

Więc to jest mój kod:

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

Dostaję błąd.

+0

Przeczytaj o wyrażenia regularne (regex) Aby uzyskać więcej informacji. – Lingviston

+2

Część sprawdzająca wydaje się być w porządku. Jaki jest błąd? –

+3

Jaki jest błąd? Czym jest "d"? Czym jest "c"? –

Odpowiedz

28

Nie tak skomplikowane, jak mówią, sprawdź to, nie pożałujesz.

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

} 

Można zmienić toLowerCase() jeśli chcesz.

+0

Dziękuję za odpowiedź fthopkins.Jest to stare pytanie, ale dziś mam podobną sytuację w pracy. Powyższy kod wyszukuje charsequence, a nie słowo. Na przykład: - Jeśli chcemy uchwycić tylko "słowo kluczowe", a nie jakiekolwiek rozszerzenia takie jak "keyword_1", powyższy kod nie będzie działać. Jednym ze sposobów na uniknięcie tego może być wyszukiwanie za pomocą ciągu znaków zawierającego funkcję słowa kluczowego (uwaga na dwa spacje po obu stronach) - czy istnieje bardziej elegancki sposób na to? – JavaTec

+1

@JavaTec musisz użyć wyrażenia regularnego, aby poprawnie wyszukać słowa. Podobnie do odpowiedzi m0skit0 (i zobacz tę odpowiedź za używanie wyrażeń skompilowanych, jeśli używasz tego samego wyrażenia w kółko), będziesz chciał to zrobić: 'if (d.matches (" \\ bkeyword \\ b ")) {/* success * /} '. '\ b' (' \\ b' w ciągu znaków, aby uniknąć ukośnika odwrotnego) dopasowuje "granicę słowa", tj. krawędzie słowa. Zaletą używania pustych przestrzeni jest to, że poprawnie dopasuje rzeczy takie jak "zdanie ze słowem kluczowym". (kropka zamiast spacji) lub nawet "słowo kluczowe" (brak spacji na początku lub na końcu). –

+1

Dzięki @LoganPickup - w końcu użyłem '\\ b' (w październiku) i działało dobrze. – JavaTec

4

Można użyć wyrażeń regularnych:

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

.* -> 0 lub więcej dowolnych znaków

Hey -> Łańcuch chcesz

Jeśli będzie sprawdzenie tego często, to lepiej jest skompilować wyrażenie regularne w obiekcie Pattern i ponownie użyć instancji Pattern, aby wykonać sprawdzanie.

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

Wystarczy pamiętać, będzie to również dopasować "Heyburg" na przykład ponieważ nie określił szukasz "Hey" jako niezależny słowa. Jeśli chcesz tylko dopasować Hey jako słowo, trzeba zmienić regex.*\\bHey\\b.*

+0

Oh my bad. Zapomniałem d = b.getText(). ToString(); część. – WhiplashOne

+0

Sądzę, że masz zamiar napisać ten komentarz jako komentarz ** na swoje pytanie **. – m0skit0

+0

@ m0skit0 możemy to zrobić, ignorując przypadek, tj. Chcę dopasować, jeśli zdanie zawiera Androida/Androida powinno zwrócić wartość true. –

9

.contains() jest całkowicie poprawny i dobry sposób, aby sprawdzić.

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

Ponieważ nie zakładać błędu, myślę d jest albo wartość null lub czy kupowana „nie może odnosić się do zmiennej nieostatecznej wewnątrz klasy wewnętrznej określonej w inny sposób” błąd.

Aby upewnić się, że nie jest pusta, najpierw sprawdź, czy w instrukcji if nie ma wartości null. Jeśli jest to inny błąd, upewnij się, że d jest zadeklarowany jako final lub jest zmienną składową Twojej klasy. Ditto dla c.

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

Korzystanie zawiera

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

} 
Powiązane problemy