黑马程序员技术交流社区

标题: 关于正则表达式的疑问 [打印本页]

作者: kira    时间: 2014-2-15 21:31
标题: 关于正则表达式的疑问
现在是这样的
需求是我将叠词(重复的字符串)替换成美元符号
结果发现却出了错误
代码如下
  1. public class RegexDemo2 {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {

  6.          String str1 = "12312312111111344124qqwer";
  7.          replaceFun(str1,"(.)\\1+","$");//将叠词替换成$符号
  8.          
  9.      }
  10.         public static  void  replaceFun(String s,String regex,String ns){
  11.                 s =s.replaceAll(regex, ns);
  12.                 System.out.println(s);
  13.                
  14.     }

  15. }
复制代码

但是我将美元符号$换成&符号 却编译成功了 各位高手这是是什么原因

作者: 云行水边    时间: 2014-2-15 21:36
同问 我也遇到过类似问题,求解答
作者: 刘旭升    时间: 2014-2-15 22:13
你的问题这有趣,我仔细看了。得到下面结果:
在替换字符串中使用反斜线 (\) 和美元符号 ($) 可能导致与作为字面值替换字符串时所产生的结果不同。美元符号可视为到如上所述已捕获子序列的引用,反斜线可用于转义替换字符串中的字面值字符。
最后想要达到你想要的效果:
  1. public class eternal {
  2.         public static void main(String[] args) {
  3.                 String str1 = "12312312111111344124qqwer";
  4.                 replaceFun(str1,"(.)\\1+","\\$");//将叠词替换成$符号
  5.      }
  6.      public static  void  replaceFun(String s,String regex,String ns){
  7.              s=s.replaceAll(regex, ns);
  8.          System.out.println(s);   
  9.     }
  10. }
复制代码

作者: 徐青松    时间: 2014-2-15 22:20
同问,求解!
作者: kira    时间: 2014-2-15 22:44
刘旭升 发表于 2014-2-15 22:13
你的问题这有趣,我仔细看了。得到下面结果:
在替换字符串中使用反斜线 (\) 和美元符号 ($) 可能导致与作 ...

哇 不愧是真神!!! 原来是这样 我懂了 遇到特殊符号如果要替换最好加上转义符
作者: baihe    时间: 2014-2-17 16:30
美元符号 ($)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2