Java 文本换行问题,由输入宽度引起
Java text wrap issue, caused by input width
我正在尝试根据 10 个字符的宽度换行文本。看了其他问题后,我有以下几点:
StringBuilder sb = new StringBuilder(s);
int i = 0;
while (i + 10 < sb.length() && (i = sb.lastIndexOf(" ", i + 10)) != -1) {
sb.replace(i, i + 1, "\n");
}
System.out.println(sb.toString());
这一直有效,直到我的字符串中的单词长于指定的宽度。发生这种情况时,字符串的其余部分将打印在 line line 上,而不是仍然遵循线宽规则。有任何想法吗?我在单独的条件下尝试了 "else",但我无法让它工作。如果这看起来微不足道,我们深表歉意。
您可以将字符串转换为字符数组并访问它们并询问变量 iterator % 10
(在本例中为 9,因为 i = 0),如果是你输入一个换行符加上字符,这一切将被添加到一个StringBuilder
...可能是一个解决方案
char[] a="ABCDFGHIKLMNOPQRSTUVWXYZ".toCharArray(); //String convert to charArray
StringBuilder sb = new StringBuilder(a.length);
for (int i = 0; i < a.length; i++) {
if(i%9==0) sb.append("\n" + a[i]); //
sb.append(a[i]);
}
System.out.println(sb.toString());
当您的单词长度超过 9 个字符时,sb.lastIndexOf("", i + 10)
给您 -1。这是因为下一个 space 的索引大于 i + 10 并且 sb.lastIndexOf("", i + 10)
从索引 i + 10 开始并查找 space 直到字符串的开头并且找不到任何 spaces(它们都被换行了)。您可以像下面那样修复您的代码以使其正常工作。
StringBuilder sb = new StringBuilder(s);
int i = 0;
while (i + 10 < sb.length() &&
(i = Math.max( sb.indexOf(" ", i), sb.lastIndexOf(" ", i + 10))) != -1) {
sb.replace(i, i + 1, "\n");
}
System.out.println(sb.toString());
有现成的解决方案。
https://mvnrepository.com/artifact/org.apache.commons/commons-text
WordUtils.wrap(s, 10);
我正在尝试根据 10 个字符的宽度换行文本。看了其他问题后,我有以下几点:
StringBuilder sb = new StringBuilder(s);
int i = 0;
while (i + 10 < sb.length() && (i = sb.lastIndexOf(" ", i + 10)) != -1) {
sb.replace(i, i + 1, "\n");
}
System.out.println(sb.toString());
这一直有效,直到我的字符串中的单词长于指定的宽度。发生这种情况时,字符串的其余部分将打印在 line line 上,而不是仍然遵循线宽规则。有任何想法吗?我在单独的条件下尝试了 "else",但我无法让它工作。如果这看起来微不足道,我们深表歉意。
您可以将字符串转换为字符数组并访问它们并询问变量 iterator % 10
(在本例中为 9,因为 i = 0),如果是你输入一个换行符加上字符,这一切将被添加到一个StringBuilder
...可能是一个解决方案
char[] a="ABCDFGHIKLMNOPQRSTUVWXYZ".toCharArray(); //String convert to charArray
StringBuilder sb = new StringBuilder(a.length);
for (int i = 0; i < a.length; i++) {
if(i%9==0) sb.append("\n" + a[i]); //
sb.append(a[i]);
}
System.out.println(sb.toString());
当您的单词长度超过 9 个字符时,sb.lastIndexOf("", i + 10)
给您 -1。这是因为下一个 space 的索引大于 i + 10 并且 sb.lastIndexOf("", i + 10)
从索引 i + 10 开始并查找 space 直到字符串的开头并且找不到任何 spaces(它们都被换行了)。您可以像下面那样修复您的代码以使其正常工作。
StringBuilder sb = new StringBuilder(s);
int i = 0;
while (i + 10 < sb.length() &&
(i = Math.max( sb.indexOf(" ", i), sb.lastIndexOf(" ", i + 10))) != -1) {
sb.replace(i, i + 1, "\n");
}
System.out.println(sb.toString());
有现成的解决方案。
https://mvnrepository.com/artifact/org.apache.commons/commons-text
WordUtils.wrap(s, 10);