我正在尝试将多行字符串打印到PrintWriter中,但它无法识别不同的行。
我有这个字符串:“2 \ n0 0 1 string1 \ n0 2 1 string2”。
我希望文件中的文字是:
2
0 0 1 string1
0 2 1 string2
但实际上是:
20 0 1 string10 2 1string2
我的代码是:
public void save(String str){
try{
PrintWriter out = new PrintWriter("file.txt");
out.println(str);
out.close();
System.out.print(str);
}catch(Exception e){System.out.println(e);}
}
它在控制台中打印好了。
我正在使用BlueJ进行编码。我的操作系统是W7,我刚用记事本打开文件。
解决!
使用“\ r \ n”而不只是“\ n”正常工作!
答案 0 :(得分:3)
如果要在Windows上表示文字换行符,则需要使用\r\n
,这是该平台的标准分隔符。
换句话说,您的原始字符串必须是
"2\r\n0 0 1 string1\r\n0 2 1 string2"
然而,这很快变得不可移植,所以你应该首先查询标准分隔符,然后用它来构造你的字符串。
String d = System.getProperty("line.separator");
String mystr = String.format("2%s0 0 1 string1%s0 2 1 string2", d, d)
此外,根据this answer,我们可以使用%n
格式说明符来避免调用getProperty()
。
String mystr = String.format("2%n0 0 1 string1%n0 2 1 string2")
答案 1 :(得分:1)
来自PrintWriter.println()
javadoc,
通过写行分隔符字符串来终止当前行。行分隔符字符串由系统属性line.separator定义,不一定是单个换行符('\ n')。
所以,我认为你可以使用 -
try{
PrintWriter out = new PrintWriter("file.txt");
for (String s : str.split("\n")) {
out.println(s);
}
out.close();
System.out.print(str);
}catch(Exception e){System.out.println(e);}