【问题标题】:How to convert string to have \n instead of line break如何将字符串转换为具有 \n 而不是换行符
【发布时间】:2016-09-11 09:44:20
【问题描述】:
AssertThat( myString1 , is (myString2));

失败了。

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

我的字符串1

hello
my name is 
alex

我的字符串2

hello\n my name is\n alex

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

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

【问题讨论】:

  • 看来myString2中的第一个\nmy之间多了一个空格。
  • 谢谢大家的提示。我很困惑,因为当我检查日志文件时,“myString1”只是变成了 myString2 形式。为了解决我的问题,我简单地使用了 escapeJava。

标签: java string junit newline


【解决方案1】:

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

StringEscapeUtils.escapeJava(StringVariableNameHere);

可以作为你问题的提示

【讨论】:

    【解决方案2】:

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

    2) 这个怎么样:

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

    或更好:

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

    无需使用外部包。

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      所以,是的,正确的答案可能是按摩该断言(或其预期值)以允许此类 \n 字符。但正确的答案也可能是“修复损坏的生产代码”。当您使用 assertThat 时,您可能会为字符串编写自己的匹配器,以某种方式简单地忽略 \n 字符;这将为您的示例字符串提供“真”...

      如前所述:有几个选项可以“解决”这个问题;但必须了解哪一个真正解决了您的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-24
        • 1970-01-01
        • 1970-01-01
        • 2021-04-21
        • 1970-01-01
        相关资源
        最近更新 更多