Как переформатировать абзац, чтобы каждое предложение было в отдельной строке? - PullRequest
1 голос
/ 30 апреля 2010

Ввод:

Hi. I am John.
My name is John. Who are you ?

Выход:

Hi
I am John
My name is John
Who are you

1 Ответ

6 голосов
/ 30 апреля 2010
    String line = "Hi. My name is John. Who are you ?";
    String[] sentences = line.split("(?<=[.!?])\\s+");
    for (String sentence : sentences) {
       System.out.println("[" + sentence + "]");
    }

Это производит:

[Hi.]
[My name is John.]
[Who are you ?]

См. Также


Если вам неудобно использовать split (хотя это рекомендуемая замена для "прежних версий" java.util.StringTokenizer), вы можете просто использовать только java.util.Scanner (что более чем достаточно для выполнения работы).

См. Также

Вот решение, которое использует Scanner, что, кстати, implements Iterator<String>.Для дополнительной учебной ценности я также показываю пример использования java.lang.Iterable<T>, чтобы вы могли использовать конструкцию for-each.

    final String text =
        "Hi. I am John.\n" +
        "My name is John. Who are you ?";

    Iterable<String> sentences = new Iterable<String>() {
        @Override public Iterator<String> iterator() {
            return new Scanner(text).useDelimiter("\\s*[.!?]\\s*");
        }
    };

    for (String sentence : sentences) {
        System.out.println("[" + sentence + "]");
    }

Это печатает:

[Hi]
[I am John]
[My name is John]
[Who are you]

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

См. Также


Примечание : модификатор final для локальной переменной text в приведенном выше фрагменте является необходимостью.В иллюстративном примере это делается для краткого кода, но в вашем реальном коде вы должны реорганизовать анонимный класс в его собственный именованный класс и сделать так, чтобы в конструкторе он занял text.

См. Также

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