Как делить текст в String на слова?

Рейтинг: 1Ответов: 1Опубликовано: 04.05.2015

Суть программы: текст вводится в textArea1, нажимается кнопка, в textArea2 появляется текст с определёнными модификациями (по сути, вставки html-тэгов для раскрашивания текста (< span>) и переноса строк (< br>)).

Метод, который запускается при нажатии кнопки, выглядит так (сокращённая версия):

public void morphText()
{
    String text[] = textAreaInput.getText().split(" ");
    for(int i = 0; i < text.length; i++)
    {
        String colourHex = "000000", name = "АНОНИМУС:";
        if(text[i].contains(":"))
        {
            switch(text[i])
            {
                case "JOHN:":
                    name = "ДЖОН:";
                    colourHex = "0715cd";
                    break;
                case "ROSE:":
                    name = "РОУЗ:";
                    colourHex = "b536da";
                    break;
                case "DAVE:":
                    name = "ДЕЙВ:";
                    colourHex = "e00707";
                    break;
                }
            text[i] = String.format("\n</span><br><span style=\"color:#%s;\">%s", colourHex, name);
        }
        text[i] += " ";
    }

    StringBuilder builder = new StringBuilder();
    for (String word : text)
        builder.append(word);

    textAreaOutput.setText(builder.toString());
}

Проблема: http://puu.sh/hAmHE/8ec63e995b.png если не ставить проблел после последнего слова в конце строки ИЛИ перед первым словом в начале следующей строки, это последнее слово теряется. если не ставить пробел перед первым словом в строке, text[i] не распознаётся через switch.

Подозреваю, что я неправильно поделил текст на слова. Как это исправить?

Ответы

▲ 4Принят

Судя по всему, функция getText возвращает строку с символами перевода строки. Их тоже надо включить в разделители. Но ещё лучшей идеей было бы делить просто по всем возможным пробельным символам, включая переводы строк и табуляцию.

String text[] = textAreaInput.getText().split("\\s");

Если вы хотите обрабатывать строки по отдельности, нужно сначала поделить на них:

String lines[] = textAreaInput.getText().split("\n");

(ну или System.getProperty("line.separator")) и делить каждую строку на слова как раньше.