我正在写一个简单的日记控制台程序。无法真正弄清楚从用户那里分解文本输入的最简单方法。我在字符串中输入日记,然后我希望能够将该字符串打印到控制台,但是未格式化它当然只是在终端的一条长行中显示字符串,这使得读取非常不友好。如何为每个x字符左右显示一个新行的字符串?我能找到的关于文本格式的所有内容都是System.out.printf(),但是只需要打印最少量的字符。
答案 0 :(得分:7)
我建议使用一些外部库来做,比如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);
这将包装你的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;
}
答案 1 :(得分:4)
如果可以使用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循环进行打印。
答案 2 :(得分:0)
您可以使用Java java.util.StringTokenizer按空格字符拆分单词,然后在循环中,您可以在每行最喜欢的单词数之后添加“\ n”。
这不是每个字符,但由于到达的字符数,可能在任何地方拆分单词都不太可读。
答案 3 :(得分:0)
您可以改用以下代码。
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