【问题标题】:replacing special chars with .replaceAll用 .replaceAll 替换特殊字符
【发布时间】:2011-06-16 09:34:15
【问题描述】:

您好,我想替换字符串中的以下字符

String a = "20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A";    
System.out.println(a);
String x  = a.replaceAll("~^", "");
System.out.println(x);

但是我的输出是:

20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A
20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A

很明显有什么事情发生了!

我已经用转义字符运行了它:

 String x  = fix.replaceAll("\\~^", "\\");

仍然是相同的输出。有什么与〜我不知道的东西有关吗?

我必须这样做:

~!~^

~!

all 在同一个字符串中我认为 3 .replaceAll 首先最长,然后是另外两个。但是我什至无法获得最简单的工作:S

已编辑:由于某种原因被删除了

Edit2:它应该将 ~^ 替换为类似于 [] 的字符框

【问题讨论】:

    标签: java string escaping replaceall


    【解决方案1】:

    据我所知,你根本不需要正则表达式?

    如果不需要正则表达式,您可以使用replace 代替replaceAll,这也将替换所有出现但它不会将第一个参数解释为正则表达式(请参阅String.replace

    String a = "20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A";    
    System.out.println(a);
    String x  = a.replace("~^", "");
    System.out.println(x);
    

    这将输出:

    20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A
    20001=EDTS20002=USA20003=117087187520004=120005=0773=665=453=2448=0A
    

    【讨论】:

      【解决方案2】:

      ^ 匹配输入字符串的开头,因此您的正则表达式 ~^ 不可能匹配任何内容。您需要转义它以匹配文字 "^":

      String x  = a.replaceAll("~\\^", "");
      

      注意~ 不是特殊字符,不需要转义。

      或者如果你想一次性替换~!~!~^~^,试试:

      String x  = a.replaceAll("~!~\\^|~!|~\\^", ""); 
      

      【讨论】:

        【解决方案3】:
        正则表达式中的

        ^ 表示行首,所以我假设 java 正在以这种方式解释它,在这种情况下,模式将永远不会匹配任何内容。您需要使用反斜杠对其进行转义,将其翻倍以使其通过 java,因此为“~\\^”。

        【讨论】:

          猜你喜欢
          • 2012-11-20
          • 2014-11-03
          • 2019-09-23
          • 1970-01-01
          • 2011-12-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多