我正在编写一个简单的日记控制台程序。无法真正弄清楚分解用户文本输入的最简单方法。我在一个字符串中记录了一个日记笔记,然后我希望能够将该字符串打印到控制台,但未格式化它当然只是在终端的一行中显示该字符串,这使得阅读起来非常不友好。我将如何为每个 x 个字符左右显示一个新行的字符串?我能找到的关于文本格式的所有信息都是 System.out.printf() ,但它只需要打印最少数量的字符。
问问题
8319 次
4 回答
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);
这将包装你的字符串,尊重空格'',固定宽度
没有外部库
您将不得不实施它:
顺便说一句:我这里没有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;
}
于 2013-10-17T11:35:45.613 回答
4
如果你可以使用 apache 通用语言库,你可以使用 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 博客中提供的这个功能。自定义文本换行的代码
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 循环打印。
于 2013-10-17T11:38:38.440 回答
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 多行字符串
于 2014-09-03T05:05:42.867 回答
0
您可以使用 Java java.util.StringTokenizer 按空格字符拆分单词,然后在循环中您可以在每行最喜欢的单词数之后添加一个“\n”。
这不是每个字符,但由于达到的字符数量,在任何地方拆分单词可能不太可读。
于 2013-10-17T11:41:24.380 回答