嗨,我一直在努力研究这种简单的方法。
目标:是在提供的宽度之后创建新行。例如。如果宽度为20,则表示15个字符后创建新行。虽然有Wordwrap.Utils可以实现。我想手动执行此操作。
问题:但是,输出正在运行,如果句子中的单词超过15个字符,则会将其切掉并创建新行。例如。Hi my name is Jimmy and I love programming.
如您所见,“吉米”一词被砍掉了。
问题:如果单词使句子超过15个字符,我如何确保在单词之前创建新行而不是将其砍掉?因此输出变为:Hi my name isJimmy and Iloveprogramming.
该类如下:
public class Test {
public static void main(String[] args){
String txt = "Hi my name is Jimmy and I love programming.";
int width = 15;
System.out.println(lineLength(txt, width));
}
public static String lineLength(String str, int width) {
StringBuilder sb = new StringBuilder();
while(true) {
if(str.length() <= width) {
sb.append(str);
break;
}
sb.append(str.substring(0, width));
sb.append("\n");
str = str.substring(width);
}
return sb.toString();
}
}
最佳答案
代码的问题在于,您没有跟踪单词中断。对您的程序稍作更改,它将寻找最接近的空格,以使空格的位置不会超出您要查找的单词的长度。
public static String lineLength(String str, int width) {
StringBuilder sb = new StringBuilder();
while (true) {
if (str.length() <= width) {
sb.append(str);
break;
}
int cutOff = 0;
int temp = 0;
while(((temp = str.indexOf(" ", ++temp)) < width) && (temp >= 0))
{
cutOff = temp;
}
//Extra check in case the word itself is longer than the wrap
if(cutOff == 0)
{
sb.append(str);
return sb.toString();
}
String newString = str.substring(0, cutOff);
sb.append(newString);
sb.append("\n");
str = str.substring(cutOff);
}
return sb.toString();
}