Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java在选定位置将字符串拆分为多个字符串_Java_String_Printing_Graphics2d_Drawstring - Fatal编程技术网

Java在选定位置将字符串拆分为多个字符串

Java在选定位置将字符串拆分为多个字符串,java,string,printing,graphics2d,drawstring,Java,String,Printing,Graphics2d,Drawstring,我正在尝试制作一种方法,将长文本分割成几行,并使用图形在文档上绘制它们。我设法找出了如何分割从JTextArea组件获得的行,但不知道如何在行过长时使它们换行/换行 以下是我目前的代码: void drawString(Graphics g, String text, int x, int y, Font w) { g.setFont(w); for (String line : text.split("\n")) g.drawSt

我正在尝试制作一种方法,将长文本分割成几行,并使用图形在文档上绘制它们。我设法找出了如何分割从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”)。还有其他的建议吗?或者我应该接受这个建议吗?
谢谢。

您可以使用这样的字数计算方法,而不是拆分方法:

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(新StringBuilder(word).append(“”.toString())
相同。我们应该使用
append(word).append(“”
)。