限制Java中println()语句的字符数

时间:2014-01-10 16:06:35

标签: java formatting string-formatting

我正在尝试实现一个带有一串文本和一列的方法 width并输出文本,每行限于列宽。

public void wrapText(String text, int width)
{
    System.out.println(text);
}

例如,使用文本调用方法:

Triometric creates unique end user monitoring products for high-value Web 
  applications, and offers unrivalled expertise in performance consulting.
列宽为20的

将导致以下输出:

Triometric creates  
unique end user  
monitoring products  
for high-value Web  
applications, and  
offers unrivalled  
expertise in  
performance  
consulting.

2 个答案:

答案 0 :(得分:3)

您可以尝试这样的事情:

public static void wrapText(String text, int width) {
    int count = 0;

    for (String word : text.split("\\s+")) {
        if (count + word.length() >= width) {
            System.out.println();
            count = 0;
        }

        System.out.print(word);
        System.out.print(' ');

        count += word.length() + 1;
    }
}

虽然仍然存在方法结果不明确的情况(例如,如果单个单词的长度大于width)。上面的代码只会在自己的行上打印出这样的单词。

答案 1 :(得分:0)

我会通过在whitelines处拆分String然后逐字打印来实现,如下所示:

public static void wrapText(String text, int width) throws Exception {
    String[] words = text.split(" ");
    int acsize = 0;
    for (String word : words) {

        if (word.length() > width) {
            throw new Exception("Word longer than with!");
        }
        if (acsize + word.length() <= width) {
            System.out.print(word + " ");
            acsize += word.length() + 1;
        } else {
            System.out.println();
            System.out.print(word + " ");
            acsize = word.length() + 1;
        }
    }
}

如果你想要打印长于宽度的单词,可以删除异常,就像你在上次评论中所说的那样。