Пунктуация и метод .next () - PullRequest
       20

Пунктуация и метод .next ()

0 голосов
/ 25 апреля 2011

Кто-нибудь знает, как метод Scanner .next () обрабатывает пунктуацию? Я не мог найти ответ на это нигде. У меня есть программа, которая читает каждое слово из текстового файла, и я не уверен, как он обрабатывает такие части, как «это», «они есть» или «она».

Для точек и запятых они считаются отдельной сущностью или считаются частью слова, если оно встречается как "она". или ее,"? В зависимости от того, что он делает, это «она» и «она». или «она» и «она» считались сканером двумя разными словами?

Для апострофов они учитываются или они фактически разделяют слово на две части? Например, «они» будут признаны как «они», «повторно» или они будут признаны как «они» в целом?

Надеюсь, я ясно понял этот вопрос.

Ответы [ 3 ]

2 голосов
/ 25 апреля 2011

Сканер имеет метод useDelimiter, который позволяет указать, какие символы будут рассматриваться как «средства разбиения по словам». Разделителем по умолчанию является шаблон пробела (поэтому символы пунктуации будут включены в слово)

0 голосов
/ 25 апреля 2011

Я не знал (только догадывался), поэтому попробовал сам:

    String input = "That's what they are, I told her. She said, it ain't so!";
    Scanner s = new Scanner(input); // default delimiter is whitespaces

    while (s.hasNext()) {
        System.out.println(s.next());
    }

Выход:

That's
what
they
are,
I
told
her.
She
said,
it
ain't
so!
0 голосов
/ 25 апреля 2011

Разделителем по умолчанию для Scanner является пробел.Поэтому ни один из приведенных вами примеров не будет разбит на части.Почему бы не попробовать это сами?

String input = "That's a they are, her. They're here.";
Scanner scanner = new Scanner(input);
while (scanner.hasNext()) {
    System.out.println(scanner.next());
}

Если вам действительно захотелось разделить что-то вроде ' и пробелы, вы бы использовали что-то вроде:

Scanner scanner = new Scanner(input).useDelimiter("[\\s']");
...