如何将字符串转换为\ n而不是换行符

时间:2016-09-11 09:44:20

标签: java string junit newline

AssertThat( myString1 , is (myString2));

失败了。

所以我通过eclipse调试“变量”控制台检查了两个值。

myString1

hello
my name is 
alex

myString2

hello\n my name is\n alex

如果我尝试使用String.compareTo,则失败。

我的问题是两个, 那些实际上是一样的吗? (控制台显示)? 2.如果没有,我如何从myString1转换为myString2?

3 个答案:

答案 0 :(得分:2)

使用此import-- org.apache.commons.lang.StringEscapeUtils

{{1}}

可以作为您问题的提示

答案 1 :(得分:0)

1)不,他们显然不一样。

2)怎么样:

myString2 = myString1.replaceAll("\\n", "\\\\n");

或更好:

myString2 = myString1.replaceAll(System.getProperty("line.separator", "\\\\n");

无需使用外部包。

答案 2 :(得分:0)

这里要理解的关键是:我们可以告诉您您的要求

这很简单:如果a.equals(b)返回true,则两个字符串对象相等。所以,显然,你的例子中的两个字符串是相等。

但背后的问题是:它对您的生产代码是否重要;因此:你的测试代码应如何处理它?!

含义:作为生产和测试代码的所有者,必须了解您是否关心这些换行符。可以有很多选项来解决您的失败测试:

  1. 为什么一个字符串中有\ n个字符;而另一个没有?你的expected value完全错了吗?
  2. 或者您的期望值是否真的"正确&#34 ;;因此:生产代码给出意外结果;这表明您的生产代码中存在问题?
  3. 所以,是的,正确的答案可能是按下断言(或其预期值)以允许这样的\ n字符。但正确的答案也可能是修复损坏的生产代码"。当你使用assertThat时,你可能会为字符串编写自己的匹配器,而这些字符串会以某种方式忽略\ n字符;这将给予" true"对于你的示例字符串......

    如上所述:有几种选择来修复"这个;但必须了解哪一个确实解决了你的问题。