Проблема с переносом текста в 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());

Это работает до тех пор, пока слово в моей строке не будет длиннее указанной ширины. Когда это происходит, остальная часть строки печатается на строке, а не по правилу ширины строки. Есть идеи? Я попробовал "еще" с отдельным условием, но я не мог заставить его работать. Извинения, если это кажется довольно тривиальным.

3 ответа

Решение

Если у вас есть слово, которое длиннее 9 символов, sb.lastIndexOf("", i + 10) дает вам -1. Это потому, что индекс следующего пробела больше, чем я + 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());

Для этого есть готовое решение.

https://mvnrepository.com/artifact/org.apache.commons/commons-текст

      WordUtils.wrap(s, 10);

Вы можете преобразовать вашу строку в массив символов и посетить их и спросить, если переменная iterator % 10 (в данном случае в 9, потому что я = 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());
Другие вопросы по тегам