【问题标题】:String replace a Backslash字符串替换反斜杠
【发布时间】:2011-08-01 13:45:44
【问题描述】:

如何对反斜杠进行字符串替换。

输入源字符串:

sSource = "http://www.example.com\/value";

在上面的字符串中,我想用“/”替换“\/”;

替换后的预期输出:

sSource = "http://www.example.com/value";

我从第三方获取源字符串,因此我可以控制字符串的格式。

这是我尝试过的

试验一:

sSource.replaceAll("\\", "/");

例外 索引 1 附近出现意外内部错误 \

试验 2:

 sSource.replaceAll("\\/", "/");

无异常,但不执行所需的替换。什么都不做。

试验 3:

 sVideoURL.replace("\\", "/"); 

无异常,但不执行所需的替换。什么都不做。

【问题讨论】:

  • 顺便说一句,如果您将其声明为字符串文字,则您的来源不能是 \/。但我会假设它来自其他地方。
  • 在您的示例中,您将 \ 替换为空,而不是 /;已经有一个正斜杠了。

标签: java string replace replaceall


【解决方案1】:
sSource = sSource.replace("\\/", "/");
  • String 是不可变的——你在它上面调用的每个方法都不会改变它的状态。它返回一个持有新状态的新实例。所以你必须将新值赋给一个变量(可以是同一个变量)
  • replaceAll(..) 使用正则表达式。你不需要那个。

【讨论】:

    【解决方案2】:

    试试replaceAll("\\\\", "")replaceAll("\\\\/", "/")

    这里的问题是,反斜杠是 (1) Java 字符串文字中的转义字符,以及 (2) 正则表达式中的转义字符——每个使用都需要将字符加倍,实际上需要 4 \ in行。

    当然,正如 Bozho 所说,您需要对结果进行一些处理(将其分配给某个变量),而不是将其丢弃。在这种情况下,非正则表达式变体更好。

    【讨论】:

      【解决方案3】:

      试试

         sSource = sSource.replaceAll("\\\\", "");
      

      编辑:好的,即使在 stackoverflow 中也有反斜杠转义...您需要在 replaceAll 第一个 String 参数中有四个反斜杠...

      这是因为反斜杠被认为是特殊字符的转义字符(例如 \n)。
      此外,replaceAll first arg 是一个正则表达式,它也使用反斜杠作为转义序列。
      因此,对于正则表达式,您需要传递 2 个反斜杠。要通过 java 字符串将这两个反斜杠传递给 replaceAll,您还需要转义两个反斜杠。
      这驱使您为表达式使用四个反斜杠!这就是java中正则表达式的美妙之处;)

      【讨论】:

      • 行不通。使用 replace() 而不是 replaceAll() 或使用四个反斜杠
      • 对于stackoverflow语法,使用``或前面的四个空格来禁用解析(并将其格式化为代码)。
      • 是的,我没有看到我的反斜杠没有被转义 :) 我编辑了我的答案
      【解决方案4】:
      s.replaceAll ("\\\\", "");
      

      您需要在源代码中屏蔽反斜杠,而对于正则表达式,您需要再次屏蔽它,因此对于每个反斜杠,您需要两个,以 4 结尾。

      但是

      s = "http://www.example.com\\/value";
      

      在源代码中也需要两个反斜杠。

      【讨论】:

        【解决方案5】:

        这会将字符串中的反斜杠替换为正斜杠:

        source = source.replace('\\','/');
        

        【讨论】:

        • 简单明了 :D 并且没有正则表达式 ;)
        【解决方案6】:

        你必须这样做

        sSource.replaceAll("\\\\/", "/");
        

        因为反斜杠应该被转义两次,一次是正则表达式中源代码中的字符串一次

        【讨论】:

          【解决方案7】:

          在特定位置替换反斜杠:

          if ((stringValue.contains("\\"))&&(stringValue.indexOf("\\", location-1)==(location-1))) {
              stringValue=stringValue.substring(0,location-1);
          }
          

          【讨论】:

            【解决方案8】:
             sSource = StringUtils.replace(sSource, "\\/", "/")
            

            【讨论】:

            • 你能解释一下 OP 的代码有什么问题吗?为什么这个更好用?
            【解决方案9】:

            对我有用

            sSource = sSource.replace("\\", "");
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-02-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-02-22
              • 2023-04-03
              • 2011-11-23
              相关资源
              最近更新 更多