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

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

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

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

这将使用固定宽度包装您的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; } 

如果可以使用apache常见的lang库,则可以使用WordUtils类(org.apache.commons.lang.WordUtils)。 如果你ex:

 System.out.println("\nWrap length of 20, \\n newline, don't wrap long words:\n" + WordUtils.wrap(str2, 20, "\n", false)); [Source here][1] 

如果你不能,你可以在programmerscookbook博客中使用这个function。 用于自定义包装文本的代码

 static String [] wrapText (String text, int len) { // return empty array for null text if (text == null) return new String [] {}; // return text if len is zero or less if (len <= 0) return new String [] {text}; // return text if less than length if (text.length() <= len) return new String [] {text}; char [] chars = text.toCharArray(); Vector lines = new Vector(); StringBuffer line = new StringBuffer(); StringBuffer word = new StringBuffer(); for (int i = 0; i < chars.length; i++) { word.append(chars[i]); if (chars[i] == ' ') { if ((line.length() + word.length()) > len) { lines.add(line.toString()); line.delete(0, line.length()); } line.append(word); word.delete(0, word.length()); } } // handle any extra chars in current word if (word.length() > 0) { if ((line.length() + word.length()) > len) { lines.add(line.toString()); line.delete(0, line.length()); } line.append(word); } // handle extra line if (line.length() > 0) { lines.add(line.toString()); } String [] ret = new String[lines.size()]; int c = 0; // counter for (Enumeration e = lines.elements(); e.hasMoreElements(); c++) { ret[c] = (String) e.nextElement(); } return ret; } 

这将返回一个字符串数组,使用for循环进行打印。

您可以使用Java java.util.StringTokenizer按空格字符拆分单词,然后在循环中,您可以在每行最喜欢的单词数之后添加“\ n”。

这不是每个字符,但由于到达的字符数,可能在任何地方拆分单词都不太可读。

您可以使用以下代码。

 String separator = System.getProperty("line.separator"); String str = String.format("My line contains a %s break line", NEW_LINE); System.out.println(str) 

你可以参考这个链接。 Java多行字符串