Java 将字符串拆分为多行
Java split string into multiple lines
我正在制作一个带有文本框的小游戏。文本框将绘制一个字符串,该字符串将分成多行以适合文本框。 "separating into multiple lines" 部分有点问题。
String[] line = new String[4];
int boxWidth = 200;
String MESSAGE = "This is a long message to make sure that the line separation works.";
String[] splitArray = null;
try {
splitArray = MESSAGE.split("\s+"); //split the words of the sentence into an array
} catch (PatternSyntaxException e) {
CrashDumping.DumpCrash(e);
}
String cursentence = "";
int curleng = 0;
int curline = 0;
for (int i = 0; i < splitArray.length; i++) {
if (curleng + m.getStringWidth(splitArray[i], r.font1) <= boxWidth) {
curleng += m.getStringWidth(splitArray[i], r.font1);
cursentence += splitArray[i]; cursentence += " ";
} else {
line[curline] = cursentence;
cursentence = "";
curline++;
curleng = 0;
}
}
for (int i = 0; i < line.length; i++) {
System.out.println("Line " + i + " - " + line[i]);
}
int getStringWidth(String sentence, Font font)
是我写的一种方法,它 return 字符串宽度(以像素为单位)。这个方法有效;这不是问题。
public int getStringWidth(String text, Font font) {
AffineTransform affinetransform = new AffineTransform();
FontRenderContext frc = new FontRenderContext(affinetransform,true,true);
return (int)(font.getStringBounds(text, frc).getWidth());
}
输出应如下所示:
Line 0 - This is a long message to make sure
Line 1 - that the line separation works.
Line 2 - null
Line 3 - null
但只会打印出第一行,后三行为空。因此,出于某种原因,for
循环在完成第一行后中断。
这是怎么回事?
仅当您的当前行已满时才分配 line[curline] = cursentence;
。但是在 for 循环完成后你不会进行赋值,这意味着当你 运行 词穷时你的剩余部分会丢失。
在 for
循环下添加此代码块:
if (!"".equals(cursentence)) {
line[curline] = cursentence;
}
正如@rodrigoap 所说,您还需要用第一行不适合的单词开始新行,该单词进入 else
块而不是 cursentence = "";
cursentence = splitArray[i];
我正在制作一个带有文本框的小游戏。文本框将绘制一个字符串,该字符串将分成多行以适合文本框。 "separating into multiple lines" 部分有点问题。
String[] line = new String[4];
int boxWidth = 200;
String MESSAGE = "This is a long message to make sure that the line separation works.";
String[] splitArray = null;
try {
splitArray = MESSAGE.split("\s+"); //split the words of the sentence into an array
} catch (PatternSyntaxException e) {
CrashDumping.DumpCrash(e);
}
String cursentence = "";
int curleng = 0;
int curline = 0;
for (int i = 0; i < splitArray.length; i++) {
if (curleng + m.getStringWidth(splitArray[i], r.font1) <= boxWidth) {
curleng += m.getStringWidth(splitArray[i], r.font1);
cursentence += splitArray[i]; cursentence += " ";
} else {
line[curline] = cursentence;
cursentence = "";
curline++;
curleng = 0;
}
}
for (int i = 0; i < line.length; i++) {
System.out.println("Line " + i + " - " + line[i]);
}
int getStringWidth(String sentence, Font font)
是我写的一种方法,它 return 字符串宽度(以像素为单位)。这个方法有效;这不是问题。
public int getStringWidth(String text, Font font) {
AffineTransform affinetransform = new AffineTransform();
FontRenderContext frc = new FontRenderContext(affinetransform,true,true);
return (int)(font.getStringBounds(text, frc).getWidth());
}
输出应如下所示:
Line 0 - This is a long message to make sure
Line 1 - that the line separation works.
Line 2 - null
Line 3 - null
但只会打印出第一行,后三行为空。因此,出于某种原因,for
循环在完成第一行后中断。
这是怎么回事?
仅当您的当前行已满时才分配 line[curline] = cursentence;
。但是在 for 循环完成后你不会进行赋值,这意味着当你 运行 词穷时你的剩余部分会丢失。
在 for
循环下添加此代码块:
if (!"".equals(cursentence)) {
line[curline] = cursentence;
}
正如@rodrigoap 所说,您还需要用第一行不适合的单词开始新行,该单词进入 else
块而不是 cursentence = "";
cursentence = splitArray[i];