【问题标题】:Java split a string into multiple ones at a selected positionJava在选定位置将一个字符串拆分为多个
【发布时间】:2017-02-01 19:50:06
【问题描述】:

我正在尝试制作一种方法,它将长文本分成几行并使用 Graphics 在文档上绘制它们。我设法弄清楚如何拆分从 JTextArea 组件获得的行,但不知道如何在行变得太长时使它们换行/中断。

到目前为止,这是我的代码:

    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")。还有其他建议还是我应该去这个?

【问题讨论】:

  • 什么意思?当前代码适用于新行,但当它们太长时就不行了。
  • 我看错了,我会删除评论。

标签: java string printing graphics2d drawstring


【解决方案1】:

您可以使用这样的字数统计方法来代替拆分方法:

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"); 
}

【讨论】:

  • 没有必要将code 部分包含在引用部分中,除非它确实是引用,在这种情况下,您还应该在答案中包含其来源。
  • 另外.append(word + " ") 表示有人不了解StringBuilder 的用途。它用于避免创建自己的新 StringBuilder 的字符串连接,这意味着此代码与.append(new StringBuilder(word).append(" ").toString()) 相同。我们应该改用append(word).append(" ")
最近更新 更多