我试图基于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());
这有效,直到我的字符串中的单词长于指定的宽度。发生这种情况时,字符串的其余部分将打印在行上,而不是仍然遵循行宽规则。有任何想法吗?我尝试了一个单独条件的“其他”,但我无法让它工作。如果这似乎相当微不足道,请道歉。
当你有一个超过9个字符的单词时,sb.lastIndexOf("", i + 10)
会给你-1。那是因为下一个空格的索引大于i + 10而sb.lastIndexOf("", i + 10)
从索引i + 10开始并且在字符串的开头找到一个空格并且找不到任何空格(它们都被新行替换)。您可以像下面一样修复代码以使其正常工作。
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());
您可以将您的字符串转换为字符数组并访问它们并询问变量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());