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

时间:2016-09-16 17:11:13

标签: java string text builder textwrapping

我正在尝试基于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());

这在我的字符串中的单词长于指定的宽度之前有效。发生这种情况时,字符串的其余部分将打印在行上,而不是仍然遵循行宽规则。有任何想法吗?我试过了一个&#34;否则&#34;有一个单独的条件,但我无法让它工作。如果这似乎相当微不足道,请道歉。

2 个答案:

答案 0 :(得分:0)

您可以将字符串转换为字符数组并访问它们并询问变量iterator % 10(在本例中为,因为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());

答案 1 :(得分:0)

当你的单词长度超过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());