【问题标题】:replace `\\r` with `\r` in string在字符串中将 `\\r` 替换为 `\r`
【发布时间】:2014-01-27 14:17:47
【问题描述】:

我需要将字符串中出现的所有\\r 转换为\r

我的尝试如下:

    String test = "\\r New Value";
    System.out.println(test);
    test = test.replaceAll("\\r",  "\r");
    System.out.println("output: " + test);

输出:

\r New Value
output: \r New Value

【问题讨论】:

  • 哦,是的,我会在一分钟内编辑它,感谢您指出。

标签: java string replace


【解决方案1】:

使用replaceAll,您将不得不使用.replaceAll("\\\\r", "\r");,因为

  • 要在正则表达式中表示\,您需要对其进行转义,因此您需要将\\ 传递给正则表达式引擎
  • 但是要为单个\ 创建字符串文字,您需要将其写为"\\"

更清晰的方法是使用replace("\\r", "\r");,它将自动转义所有正则表达式元字符。

【讨论】:

    【解决方案2】:

    您必须转义每个 \ 符号。

    试试:

    test = test.replaceAll("\\\\r",  "\\r");
    

    【讨论】:

      【解决方案3】:

      \ 在 Java 中用于转义 - 所以每次你真正想匹配字符串中的反斜杠时,你需要写两次。

      此外,这也是大多数人似乎缺少的 - replaceAll() 采用正则表达式,而您只想基于简单的字符串替换进行替换 - 所以请改用 replace() (从技术上讲,您当然也可以通过转义正则表达式在简单字符串上使用replaceAll(),但随后您要么必须在参数上使用Pattern.quote(),要么编写4个反斜杠来匹配一个反斜杠,因为它是一个特殊的正则表达式和 Java 中的字符!)

      一个常见的误解是replace() 只是替换了第一个实例but this is not the case

      用指定的文字替换序列替换此字符串中与文字目标序列匹配的每个子字符串

      ...唯一的区别是它适用于文字,而不适用于正则表达式。

      在这种情况下,您无意中转义了r,这会产生回车馈送!因此,基于上述内容,为了避免这种情况,您实际上想要:

      String test = "\\\\r New Value";
      

      和:

      test = test.replace("\\\\r",  "\\r");
      

      【讨论】:

      • 我需要使用 replaceAll() 因为字符串中可以有更多的\\r,我已经发布了一个测试字符串来保持问题的重点。
      • @GauravGupta 你误解了替换 - 它确实替换了每个出现,而不仅仅是第一个:docs.oracle.com/javase/6/docs/api/java/lang/…, java.lang.CharSequence) 唯一的区别是它需要一个 literal 替换而不是正则表达式,在这种情况下,这就是你想要的。
      • 让我也用 replace() 试试。
      【解决方案4】:

      字符\rcarriage return :)

      要打印\,请使用escape character\

      System.out.println("\\");
      

      解决方案

      \ 转义\ :)

      public static void main(String[] args) {
          String test = "\\\\r New Value";
          System.out.println(test);
          test = test.replaceAll("\\\\r",  "\\r");
          System.out.println("output: " + test);
      }
      

      结果

      \\r New Value
      output: \r New Value
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-17
        • 2021-10-30
        • 2015-06-11
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        相关资源
        最近更新 更多