我正在尝试使用正则表达式将单个字符串分成多行。例如
(856587-A) 1806, LEBUH abcdef wref MUTIARA 14000 xxxx xxxxx xxxxxx, 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");
}
答案 0 :(得分:0)
首先将输入字符串分解为“单词”。根据定义“单词”的方式,这可能很容易,也可能很困难。对于仅由任意数量的空格分隔的单词,类似以下内容将很好地完成工作:
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();
}