【问题标题】:How to remove backslash from String in Java?如何从Java中的String中删除反斜杠?
【发布时间】:2017-05-02 06:05:08
【问题描述】:

我有一个包含反斜杠字符 (\) 的字符串值。我的目标是用字符(_)替换它。

我按照这个问题How to remove the backslash in string using regex in Java? 中提供的解决方案做了以下操作

String x = "2\5\2017"; x = x.replaceAll("\\\\", "_");

但我总是将 (27) 作为 x 的值。注意:2 到 7 之间有未知字符。在控制台中,我可以看到它是一个小方块。

【问题讨论】:

  • 两种解决方案都试过了吗? (replaceAll 和 replace)。 PS:您也需要在x 中转义\ -> String x = "2\\5\\2017";
  • 在字符串文字中,反斜杠是一个转义字符,这意味着"2\5\2017"被解释为4个字符,其中中间两个具有ASCII值5和201(作为八进制数字) .您需要在字符串文字中转义反斜杠:"2\\5\\2017"
  • @AxelH 是的,我做了 replace 和 replaceAll ,得到了相同的结果。字符串值像这样来自数据库,添加双斜杠不是硬编码值。
  • 您的问题不在replace - 而是在原始字符串中。 (其他人也提到了这一点)。要确认这一点 - 只需尝试打印原始字符串 - 不应用任何替换...看看会发生什么。
  • @Salman 您能否确认您在示例中向我们展示的值是System.out.print(x); 的结果如果是这样,那么您的字符串是正确的,但是因为您有一个输出@ 987654338@ 那我猜不是。然后您应该检查您的方法以获取该值,因为问题来自 DB 或 JDBC。

标签: java string


【解决方案1】:

这是因为你没有在x("2\5\2017")中转义\,如果你在x中没有转义\,它会认为\5和\201 (octal 将有 3 位数字)将是 octal 数字。所以:

"2\5\2017"

将显示为:

2??7

所以你应该unescape喜欢@Harmlezz的方式。

【讨论】:

  • 字符串值来自 DB 为 "2\5\2017" 没有双斜杠如何将@Harmlezz 解决方案应用于这种情况
  • @Salman 你的意思是,如果你在它来自 Db 的那一刻打印出字符串值,那么你会在控制台中得到 2\5\2017 而不是 2??7 之类的东西(正如@chengpohi 提到的那样)?在这种情况下,您的示例有缺陷..导致“2\\5\\2017”打印为2\5\2017....
【解决方案2】:

我认为您想将输入字符串重新定义为:

String x = "2\\5\\2017"

那么x 的结果将是:

2_5_2017

【讨论】:

    【解决方案3】:

    只需使用 " \\ " 在您的字符串中添加 " \ "。然后将其替换为 " _ "

    String x = "2\\5\\2017"; x = x.replaceAll("\\\\", "_");

    “\”是一个特殊字符,要在我们的字符串中看到“\”,我们需要在字符串中添加一个额外的“\”,例如“\\”。

    通过Special Characters了解更多信息

    【讨论】:

      【解决方案4】:

      正如 Plirkee、AxelH 和 chengpohi 所说,原始值不正确。

      我们设法从 DB (2/5/2017) 而不是 (2\5\2017) 获得不同的形式,然后 replaceAll 工作。

      【讨论】:

        猜你喜欢
        • 2016-12-05
        • 2012-04-17
        • 1970-01-01
        • 1970-01-01
        • 2019-12-23
        • 1970-01-01
        • 1970-01-01
        • 2017-02-11
        • 2019-02-02
        相关资源
        最近更新 更多