Java 在选定位置将字符串拆分为多个
Java split a string into multiple ones at a selected position
我正在尝试制作一种将长文本拆分为多行并使用图形将它们绘制在文档上的方法。我设法弄清楚如何拆分从 JTextArea 组件获得的行,但不知道如何在行太长时使它们 wrap/break。
到目前为止,这是我的代码:
void drawString(Graphics g, String text, int x, int y, Font w) {
g.setFont(w);
for (String line : text.split("\n"))
g.drawString(line, x, y += g.getFontMetrics().getHeight());
}
感谢任何帮助。
编辑:
我想解决这个问题是计算字符串的字符位置,如果它到达选定的位置,那么我会在那里添加一个换行符 ("\n")
。还有其他建议吗?我应该选择这个吗?
您可以使用这样的字数统计方法来代替拆分方法:
public String[] splitIntoLine(String input, int maxCharInLine){
StringTokenizer tok = new StringTokenizer(input, " ");
StringBuilder output = new StringBuilder(input.length());
int lineLen = 0;
while (tok.hasMoreTokens()) {
String word = tok.nextToken();
while(word.length() > maxCharInLine){
output.append(word.substring(0, maxCharInLine-lineLen) + "\n");
word = word.substring(maxCharInLine-lineLen);
lineLen = 0;
}
if (lineLen + word.length() > maxCharInLine) {
output.append("\n");
lineLen = 0;
}
output.append(word).append(" ");
lineLen += word.length() + 1;
}
// output.split();
// return output.toString();
return output.toString().split("\n");
}
我正在尝试制作一种将长文本拆分为多行并使用图形将它们绘制在文档上的方法。我设法弄清楚如何拆分从 JTextArea 组件获得的行,但不知道如何在行太长时使它们 wrap/break。
到目前为止,这是我的代码:
void drawString(Graphics g, String text, int x, int y, Font w) {
g.setFont(w);
for (String line : text.split("\n"))
g.drawString(line, x, y += g.getFontMetrics().getHeight());
}
感谢任何帮助。
编辑:
我想解决这个问题是计算字符串的字符位置,如果它到达选定的位置,那么我会在那里添加一个换行符 ("\n")
。还有其他建议吗?我应该选择这个吗?
您可以使用这样的字数统计方法来代替拆分方法:
public String[] splitIntoLine(String input, int maxCharInLine){
StringTokenizer tok = new StringTokenizer(input, " ");
StringBuilder output = new StringBuilder(input.length());
int lineLen = 0;
while (tok.hasMoreTokens()) {
String word = tok.nextToken();
while(word.length() > maxCharInLine){
output.append(word.substring(0, maxCharInLine-lineLen) + "\n");
word = word.substring(maxCharInLine-lineLen);
lineLen = 0;
}
if (lineLen + word.length() > maxCharInLine) {
output.append("\n");
lineLen = 0;
}
output.append(word).append(" ");
lineLen += word.length() + 1;
}
// output.split();
// return output.toString();
return output.toString().split("\n");
}