Java 在不中断单词或忽略任何字符的情况下拆分字符串
我正在尝试使用正则表达式将单个字符串拆分为多行。例如Java 在不中断单词或忽略任何字符的情况下拆分字符串,java,regex,string,split,Java,Regex,String,Split,我正在尝试使用正则表达式将单个字符串拆分为多行。例如 (856587-A) 1806, LEBUH abcdef wref MUTIARA 14000 xxxx xxxxx xxxxxx, xxx.* 我想在每行中拆分32个字符 不从字符串中删除任何特殊字符 如果最后一个单词被剪切,请将其移动到下一行 通过使用相邻的代码,我能够实现以下结果 856587-A)1806,勒布阿布德夫西区 ef MUTIARA 14000 xxxxx xxxxx xxx xxx,xxx* 但是,它是从第一行中
(856587-A) 1806, LEBUH abcdef wref MUTIARA 14000 xxxx xxxxx xxxxxx, xxx.*
- 856587-A)1806,勒布阿布德夫西区
- ef MUTIARA 14000 xxxxx 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");
}
首先,将输入字符串拆分为“单词”。这可能很容易,也可能很难,具体取决于定义“单词”的方式。对于仅由任意数量的空格分隔的单词,类似这样的操作将很好地完成这项工作:
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();
}
请尝试
nfAddr=nfAddr.replaceAll(“.{30,}\\b[\\p{p}\\p{S}\\h]*”,“$0\n”);
,请参阅。另外,“{0,30}\\b[\\p{p}\\p{S}\\h]*”
可能会有所帮助。可能会重复感谢。这对我来说非常有效,而不是regex:)