对于JUnit测试,我需要一个由多行组成的String。但我得到的只是一个单行字符串。我尝试了以下方法:
String str = ";;;;;;\n" +
"Name, number, address;;;;;;\n" +
"01.01.12-16.02.12;;;;;;\n" +
";;;;;;\n" +
";;;;;;";
我还尝试了\n\r
而不是\n
。 System.getProperty(“line.separator”)也不起作用。它在String中生成\n
并且没有回车符。那我怎么解决呢?
答案 0 :(得分:37)
这取决于“多行”的含义。不同的操作系统使用不同的行分隔符。
在Java中,\r
始终是回车符,\n
是换行符。在Unix上,只有\n
足以换行,而Windows上的许多程序都需要\r\n
。您可以使用平台默认换行符System.getProperty("line.separator")
或使用其他答案中提到的String.format("%n")
。
但实际上,您需要知道是否尝试来生成特定于操作系统的换行符 - 例如,如果这是将作为特定协议的一部分传输的文本,那么您应该看到该协议认为是换行符。例如,RFC 2822定义了\r\n
的行分隔符,即使您在Unix上运行,也应使用。所以这完全取决于背景。
答案 1 :(得分:9)
我知道在Java中生成换行符的最快方法是:String.format("%n")
当然,您可以在%n
周围添加任何内容,例如:
String.format("line1%nline2")
或者即使你有很多行:
String.format("%s%n%s%n%s%n%s", "line1", "line2", "line3", "line4")
答案 2 :(得分:3)
尝试\r\n
其中\r
回车。另外,请确保您的输出没有新行,因为调试器可以显示\n
,\r
,\t
等格式的特殊字符。
答案 3 :(得分:1)
这样做: 第1步:你的字符串
String str = ";;;;;;\n" +
"Name, number, address;;;;;;\n" +
"01.01.12-16.02.12;;;;;;\n" +
";;;;;;\n" +
";;;;;;";
第2步:只需更换所有" \ n"用"%n"结果看起来像这样
String str = ";;;;;;%n" +
"Name, number, address;;;;;;%n" +
"01.01.12-16.02.12;;;;;;%n" +
";;;;;;%n" +
";;;;;;";
请注意,我只是把"%n"取代" \ n"
第3步:现在只需调用format()
str=String.format(str);
你需要做的就是这些。
答案 4 :(得分:1)
尝试追加字符.append('\r').append('\n');
而不是字符串.append("\\r\\n");
答案 5 :(得分:0)
感谢您的回答。我错过了我的数据存储在传递给测试方法的List<String>
中。错误是我将字符串放入ArrayList的第一个元素。这就是为什么我认为String只包含一行,因为调试器只显示了一个条目。