Java文本自动换行问题,由输入宽度引起



我试图根据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());

直到我的字符串中的一个单词长于指定的宽度。当发生这种情况时,字符串的其余部分将逐行打印,而不是仍然遵循行宽规则。什么好主意吗?我尝试了一个带有单独条件的"else",但我无法让它工作。如果这看起来相当微不足道,我很抱歉。

有现成的解决方案。

https://mvnrepository.com/artifact/org.apache.commons/commons-text

WordUtils.wrap(s, 10);

当你有一个超过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());

最新更新