Алгоритм разделения текста Java - PullRequest
1 голос
/ 25 ноября 2010

У меня есть большая строка (с текстом). Мне нужно разбить его на несколько частей (в соответствии с максимальным лимитом чата), выполнить некоторые операции с ними независимо, и в итоге объединить результат.

Довольно простая задача. Я просто ищу алгоритм, который будет естественным образом разбивать текст. Таким образом, он не разбивает его на подстроки фиксированного размера и не разрезает слова пополам.

Например (* это 100-й символ, максимальный предел установлен на 100):

.... разделить меня аро * и здесь ...

1-й фрагмент должен содержать: ... разбить меня

2-й фрагмент должен быть: где-то здесь ...

Кстати, на Java.

Ответы [ 4 ]

7 голосов
/ 25 ноября 2010

Статья в Википедии о переносе слов обсуждает это. Он также ссылается на алгоритм от Кнута.

1 голос
/ 15 марта 2011

Jakarta commons-lang WordUtils.wrap () близко:

  • Разрывается только на пробелы
  • Не возвращает список, ноВы можете выбрать «разделитель строк», который вряд ли будет встречаться в тексте, а затем разделить его на
1 голос
/ 25 ноября 2010

Вы можете использовать lastIndexOf (поиск строки, int index).

public static List<String> splitByText(String text, String sep, int maxLength) {
    List<String> ret = new ArrayList<String>();
    int start = 0;
    while (start + maxLength < text.length()) {
        int index = text.lastIndexOf(sep, start + maxLength);
        if (index < start)
            throw new IllegalArgumentException("Unable to break into strings of " +
                    "no more than " + maxLength);
        ret.add(text.substring(start, index));
        start = index + sep.length();
    }
    ret.add(text.substring(start));
    return ret;
}

И

System.out.println(splitByText("....split me around here...", " ", 14));

Печать

[....split me, around here...]
0 голосов
/ 25 ноября 2010

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

//textarea is JTextArea instance
textarea.setLineWrap(true);
textarea.setWrapStyleWord(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...