Java - как разобрать слова в строке для конкретного слова - PullRequest
4 голосов
/ 21 февраля 2010

Как мне разобрать слово "привет" в предложении "привет, как дела?" или в разборе на слово "как" в "как дела?"?

пример того, что я хочу в коде:

String word = "hi";
String word2 = "how";
Scanner scan = new Scanner(System.in).useDelimiter("\n");
String s = scan.nextLine();
if(s.equals(word)) {
System.out.println("Hey");
}
if(s.equals(word2)) {
System.out.println("Hey");
}

Ответы [ 5 ]

7 голосов
/ 21 февраля 2010

Чтобы просто найти подстроку, вы можете использовать contains или indexOf или любой другой вариант:

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html

if( s.contains( word ) ) {
   // ...
}

if( s.indexOf( word2 ) >=0 ) {
   // ...
}

Если вы заботитесь о границах слов, то StringTokenizer, вероятно, является хорошим подходом.

http://java.sun.com/j2se/1.4.2/docs/api/java/util/StringTokenizer.html

Затем можно выполнить проверку без учета регистра (equalsIgnoreCase) для каждого слова.

5 голосов
/ 21 февраля 2010

Похоже на работу для Регулярные выражения . Contains даст ложный положительный результат, скажем, "hire-purchase".

if (Pattern.match("\\bhi\\b", stringToMatch)) { //...
3 голосов
/ 21 февраля 2010

Я бы пошел на java.util.StringTokenizer: http://java.sun.com/j2se/1.4.2/docs/api/java/util/StringTokenizer.html

StringTokenizer st = new StringTokenizer(
    "Hi, how are you?", 
    ",.:?! \t\n\r"       //whitespace and puntuation as delimiters
);
 while (st.hasMoreTokens()) {
     if(st.nextToken().equals("hi")){
         //matches "hi"
     }
 }

Или посмотрите на java.util.regex и используйте регулярные выражения.

0 голосов
/ 22 февраля 2010

Вы можете передать регулярное выражение методу next(), равному Scanner. Таким образом, вы можете перебирать каждое слово во входных данных (по умолчанию в качестве разделителей используются пробелы) и выполнять соответствующую обработку, если вы получите совпадение.

0 голосов
/ 21 февраля 2010

Я бы пошел вместо токенизатора . Установите пробел и другие элементы, такие как запятые, точки остановки и т. Д. В качестве разделителей. И помните, чтобы сравнить в режиме без учета регистра.

Таким образом, вы можете найти «привет» в «Привет, как проходит его тест», не получая ложный положительный результат на «его» и ложный отрицательный на «Привет» (начинается с прописной буквы H).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...