Разделение строки без разбивки слов или игнорирования любых символов - PullRequest
0 голосов
/ 28 ноября 2018

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

(856587-A) 1806, LEBUH abcdef wref MUTIARA 14000 xxxx xxxxx xxxxxx, xxx.*
  1. Я хочу разбить 32 символа в каждой строке.
  2. не удалять никаких специальных символов из строки.
  3. , если последнее словосокращаясь, переместите его на следующую строку.

Мне удалось достичь приведенного ниже результата с помощью прилагаемого кода.

  • 856587-A) 1806, LEBUH abcdef wr
  • ef MUTIARA 14000 xxxx xxxxx xxx
  • xxx, xxx. *

Однако он удаляет '(' из первой строки, разрывая последнее слово ипереместив его на следующую строку.

String nfAddr = "(856587-A) 1806, LEBUH abcdef wref MUTIARA 14000 xxxx xxxxx xxxxxx, xxx.*";

Pattern pn = Pattern.compile("\\w.{1," + (30) + "}");
Matcher mn = pn.matcher(nfAddr);
while (mn.find()) {
                nfAddr = nfAddr + (mn.group()+"\n");
            }

1 Ответ

0 голосов
/ 28 ноября 2018

Начните с разбивки входной строки на «слова».Это может быть легко или сложно в зависимости от того, как вы определяете «слово».Для слов, просто разделенных любым количеством пробелов, что-то вроде этого будет хорошо работать:

 String[] words = nfAddr.split("\\s+");

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

static public String formatParagraph(String text, int maxWidth)
{
    String[] words = text.split("\\s+");

    StringBuilder pp = new StringBuilder();
    StringBuilder line = new StringBuilder();
    for (String w : words) {
        if (line.length() + w.length() + 1 > maxWidth) {
            if (pp.length() > 0) {
                pp.append(System.lineSeparator());
            }
            pp.append(line.toString());
            line.setLength(0);
        }
        if (line.length() > 0) {
            line.append(' ');
        }
        line.append(w);
    }
    if (line.length() > 0) {
        if (pp.length() > 0)
            pp.append(System.lineSeparator());
        pp.append(line);
    }
    return pp.toString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...