在Java中格式化控制台的文本输出

mis*_*sch 3 java command-line-interface

我正在写一个简单的日记控制台程序.无法真正弄清楚从用户那里分解文本输入的最简单方法.我在字符串中输入日记,然后我希望能够将该字符串打印到控制台,但是未格式化它当然只是在终端的一条长线中显示字符串,这使得读取非常不友好.如何为每个x字符左右显示一个新行的字符串?我能找到的关于文本格式的所有内容都是System.out.printf(),但是只需要打印最少量的字符.

Ram*_*oza 7

我建议使用一些外部库来做,比如Apache commons:

http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/text/WordUtils.html

和使用

http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/text/WordUtils.html#wrap(java.lang.String,int)

static final int FIXED_WIDTH = 80;

String myLongString = "..."; // very long string
String myWrappedString = WordUtils.wrap(myLongString,FIXED_WIDTH);
Run Code Online (Sandbox Code Playgroud)

这将使用固定宽度包装您的String,尊重空格''

没有外部图书馆

你必须实现它:

BTW:我这里没有java的编译器来测试它,所以如果不直接编译就不要愤怒.

private final static int MAX_WIDTH = 80;

public String wrap(String longString) {
    String[] splittedString = longString.split(" ");
    String resultString = "";
    String lineString = "";

    for (int i = 0; i < splittedString.length; i++) {
        if (lineString.isEmpty()) {
            lineString += splittedString[i];
        } else if (lineString.length() + splittedString[i].length() < MAX_WIDTH) {
            lineString += splittedString[i];
        } else {
            resultString += lineString + "\n";
            lineString = "";
        }
    }

    if(!lineString.isEmpty()){
            resultString += lineString + "\n";
    }

    return resultString;
}
Run Code Online (Sandbox Code Playgroud)