繁体   English   中英

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

[英]How to convert string to have \n instead of line break

AssertThat( myString1 , is (myString2));

失败了。

因此,我通过Eclipse调试“变量”控制台检查了两个值。

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)返回true 时才相等。 因此,显然,示例中的两个字符串相等。

但是,这背后的问题是:它与您的生产代码有关吗? 因此:您的测试代码应如何处理?

意思是: 作为生产和测试代码的拥有者, 有,如果你关心那些换行符理解。 可能有很多选择可以解决您的测试失败:

  1. 为什么一个字符串中包含\\ n个字符? 而另一个没有? 您的expected value仅仅是错误的吗?
  2. 还是您的期望值真的“正确”? 因此,生产代码给出了意外的结果; 从而表明您的生产代码中存在问题?

因此,是的,正确的答案可能是对断言(或其期望值)进行处理以允许此类\\ n字符。 但是正确的答案也可能是“修复损坏的生产代码”。 在使用assertThat时,您可能会为自己的字符串编写匹配器,而这些字符串只是以某种方式忽略了\\ n字符。 这将为您的示例字符串提供“ true” ...

如前所述:有几种方法可以“修复”此问题; 必须了解哪一个确实可以解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM