我正在寫一個簡單的日記控制檯程序。無法真正弄清楚分解來自用戶的文本輸入的最簡單方式。我在一個字符串中記錄日記,然後我希望能夠將該字符串打印到控制檯,但未格式化它當然只是在終端的一條長線上顯示字符串,使其非常不友好地閱讀。我會如何顯示每個x字符左右的換行符?我所能找到的關於文本格式的東西都是System.out.printf(),但它只有最少量的要打印的字符。爲Java控制檯設置文本輸出格式
回答
我會建議使用一些外部庫來做,比如Apache Commons:中
http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/text/WordUtils.html
,並使用
static final int FIXED_WIDTH = 80;
String myLongString = "..."; // very long string
String myWrappedString = WordUtils.wrap(myLongString,FIXED_WIDTH);
這將包裹你的字符串,尊重空間'',固定寬度
無外部庫
您必須實現它:
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;
}
'String'有一個'length()'而不是'size()'。 –
如果你可以使用Apache共同Lang庫,你可以使用WordUtils類(org.apache.commons.lang.WordUtils)。如果您 例如:
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博客使用此功能。 code to do custom wrapping of text
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」。
這不是每個字符,但可能由於到達的字符數量太多而無法在任何地方分割單詞。
作爲我發佈的答案代碼? :P – RamonBoza
是的。這可能是使用String.split(..)更推薦的解決方案。 – BuddhaAir
這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 – DreadPirateShawn
您可以改用下列代碼。
String separator = System.getProperty("line.separator");
String str = String.format("My line contains a %s break line", NEW_LINE);
System.out.println(str)
您可以參考此鏈接。 Java multiline string
有兩個問題,爲什麼麻煩聲明'separator'變量,如果你從來沒有使用它,並且'NEW_LINE'聲明在哪裏(除非這是一個Java常量)? 另外,如果您不知道,可以使用'%n'格式化一個對系統正確的換行符。 – SpencerD
- 1. 控制檯輸出格式
- 2. 控制檯輸出格式
- 3. Java控制檯輸出成爲下一個控制檯輸入
- 4. 格式化控制檯輸出
- 5. 簡單的控制檯輸出格式
- 6. 格式[R控制檯輸出
- 7. C++控制檯 - 格式化輸出
- 8. 格式化Rails的控制檯輸出
- 9. 格式化C++控制檯輸出
- 10. 控制檯輸出格式和控制檯Alloc
- 11. 設置文本格式輸出在UNIX
- 12. Java控制檯輸出 - 文件和控制檯BOTH
- 13. 格式化操作在Java控制檯輸出打印
- 14. Java:輸出文本文件到控制檯
- 15. 從java中將控制檯輸出寫入文本文件
- 16. 輸出控制檯到文本文件? - Java的
- 17. Java:如何將控制檯輸出保存到文本文件?
- 18. 控制檯輸出爲HTML文件
- 19. 將整個控制檯輸出輸出到文本文件
- 20. Jenkins控制檯輸出格式爲selemium webdriver執行
- 21. 將C#控制檯應用程序設置爲Unicode輸出
- 22. 寫作控制檯輸出(空格分隔文本)使用Python
- 23. 基本控制檯輸入和輸出
- 24. 控制檯輸出
- 25. 輸出控制檯
- 26. 控制檯式的文本控制?
- 27. 轉換c#控制檯輸出到文本框輸出
- 28. Java - windows/linux中的控制檯輸出
- 29. 控制檯輸出在java中變化
- 30. 控制檯Java中沒有輸出
如果您想硬包裝'String',則需要手動插入換行符。您可以'System.out.print'單個單詞,並且字符數可以在達到閾值時插入換行符。 –
您可以先使用String.split(「」)將其拆分爲單詞。 – Kayaman