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

How to convert string to have \n instead of line break

AssertThat( myString1 , is (myString2));

正在失败。

所以我通过 eclipse 调试 "variables" 控制台检查了两个值。

myString1

hello
my name is 
alex

myString2

hello\n my name is\n alex

如果我尝试 String.compareTo,它失败了。

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

使用这个导入-- org.apache.commons.lang.StringEscapeUtils

StringEscapeUtils.escapeJava(StringVariableNameHere);

将作为您问题的提示

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

2) 这个怎么样:

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

或更好:

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

无需使用外部包。

这里要理解的关键是:我们可以不能告诉你你的要求.

真的很简单:两个字符串对象 只有 相等,如果 a.equals(b) returns 为真。因此,显然,您示例中的两个字符串 相等。

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

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

  1. 为什么一个字符串里面有\n个字符;而另一个没有?你的 expected value 完全错了吗?
  2. 或者你的期望值真的是"correct";因此:生产代码给出了 unexpected 结果;从而表明您的生产代码中存在问题?

所以,是的,正确的答案可能是按摩断言(或其预期值)以允许此类 \n 字符。但正确答案也可以是 "fix broken production code"。当您使用 assertThat 时,您可能会为字符串编写自己的匹配器,以某种方式简单地忽略 \n 字符;这将为您的示例字符串提供 "true" ...

如前所述:"fix" 有多种选择;但是必须明白哪一个真正解决了的问题。