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