Как сканировать слова в Java, исключая знаки препинания - PullRequest
0 голосов
/ 03 октября 2011

Я пытаюсь использовать класс сканера для разбора всех слов в файле. Файл содержит обычный текст, но я хочу взять только слова, исключая все измышления. Решение, которое я имею до сих пор, не является полным, но оно уже доставляет мне некоторые проблемы:

Scanner fileScan= new Scanner(file);
String word;
while(fileScan.hasNext("[^ ,!?.]+")){       
    word= fileScan.next();
    this.addToIndex(word, filename);
}

Теперь, если я использую это в предложении типа "привет, меня зовут Марио!" он возвращает только "привет", "мой", "имя" и "есть". Это не соответствует "Марио!" (очевидно) но это не соответствует "Марио", как я думаю, что должно.

Можете ли вы объяснить, почему это так, и помочь мне найти лучшее решение, если оно у вас есть? Спасибо

Ответы [ 2 ]

4 голосов
/ 04 октября 2011

Это работает:

import java.util. *;

class S {

    public static void main(String[] args) {
        Scanner fileScan= new Scanner("hi my name is mario!").useDelimiter("[ ,!?.]+");
        String word;
        while(fileScan.hasNext()){       
            word= fileScan.next();
            System.out.println(word);
        }

    } // end of main()
}


javac -g S.java && java S
hi
my
name
is
mario
0 голосов
/ 03 октября 2011

Поскольку вы хотите избавиться от знаков препинания, вы можете просто заменить все знаки препинания перед добавлением в индекс:

word = word.replaceAll("\\{Punct}", "");

В случае гипситов или других отдельных знаков препинания, вы просто проверяете word.isEmpty() перед добавлением.

Конечно, вам придется избавиться от своего пользовательского разделителя.

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