我正在编写一个简单的日记控制台程序,但无法确定从用户那里获取文本输入的最简单方法。我将一条日记记录作为字符串输入,然后希望能够将该字符串打印到控制台上,但当然要去除格式,只是在终端上显示一行长字符串,使其非常难以阅读。如何在每个x个字符左右显示一个新行来显示字符串?我能找到的所有文本格式化信息都是关于System.out.printf(),但它只有一个最小的需要打印的字符数。
我正在编写一个简单的日记控制台程序,但无法确定从用户那里获取文本输入的最简单方法。我将一条日记记录作为字符串输入,然后希望能够将该字符串打印到控制台上,但当然要去除格式,只是在终端上显示一行长字符串,使其非常难以阅读。如何在每个x个字符左右显示一个新行来显示字符串?我能找到的所有文本格式化信息都是关于System.out.printf(),但它只有一个最小的需要打印的字符数。
static final int FIXED_WIDTH = 80;
String myLongString = "..."; // very long string
String myWrappedString = WordUtils.wrap(myLongString,FIXED_WIDTH);
这将使用固定宽度对字符串进行换行处理,同时保留空格。
不使用外部库
您需要自己实现此功能:
顺带一提:我这里没有 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()
。 - Boris the Spider如果您可以使用Apache Common 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]
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;
}
您可以使用以下代码代替。
String separator = System.getProperty("line.separator");
String str = String.format("My line contains a %s break line", NEW_LINE);
System.out.println(str)
您可以参考此链接。 Java多行字符串
separator
变量?NEW_LINE
在哪里声明(除非它是Java常量)?此外,如果你不知道,你可以使用%n
来格式化一个换行符,这对于系统是正确的。 - Spencer D
String
进行硬换行,您需要手动插入换行符。您可以使用System.out.print
打印单个单词,并计算字符数,当达到阈值时插入换行符。 - Boris the Spider