A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tanlei200620 黑马帝   /  2012-2-21 16:38  /  1782 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在实验一些东西的时候得到的很怪的结果,不懂原理,求教:代码如下:
        String s = "AA";
        System.out.println(s);//打印原先的字符串,便于比较
        System.out.println(s.replaceAll("", "谭"));//被替换的东西是空格。
        s = "\\AA";
        System.out.println(s);
        //想将字符串 s 中的单个反斜杠 替换为两个,想在处理一些字符串时使用,比如用户通过控制台输入的字符串。即使没有人工处理仍可正常打印
        //System.out.println(s.replaceAll("\\", "\\\\"));   编译失败
        System.out.println(s.replaceAll("\\\\", "\\\\"));   //没有达到效果
        System.out.println(s.replaceAll("\\\\", "\\\\\\\\"));  //达到预期效果。

        System.out.println(s.replaceAll("\\A", "谭"));   //这句代码连我自己也不知道是什么意思,不过出了个很怪的结果。还有为什么加上一个其他的内容就能通过编译,单纯用 "\\"就无法通过编译。  


可是出现很奇怪的结果。

        s = "";
        System.out.println(s.replaceAll("", "谭"));
        s = "aaa";
        String[] temp = s.split("");
        for(String t: temp){
                         System.out.println(t);
        }


程序运行结果如下:
AA
谭A谭A谭
\AA
\AA
\\AA
谭\AA


a
a
a

3 个回复

倒序浏览
java replaceAll() 方法要用 4 个反斜杠,表示一个反斜杠

例如  str1="aa\bbb"; str2="aa'bbb";

要想替换成 str1="aa\\bbb";str2="aa\'bbb";

必须这样替换:

            str1 = str1.replaceAll("\\\\", "\\\\\\\\");
            str2 = str2.replaceAll("'", "\\\\'");

原因如下:

String 的 replaceAll() 方法,实际是采用正则表达式的规则去匹配的,

\\\\  ,java解析为\\交给正则表达式,  正则表达式再经过一次转换,把\\转换成为\

也就是java里面要用正则来表示一个\. 必须写成4个\

如果要表示\\,那就要写8个\


所以如果写成: str1 = str1.replaceAll("\\", "\\\\");

就会报正则表达式的错误。
--------------------------------------------------------
以上内容来源网络,表示学习了

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
System.out.println(s.replaceAll("", "谭"));
System.out.println(s.replaceAll("\\A", "谭"));
String[] temp = s.split("");

主要是这些我不懂什么意思,就是编译器会怎么理解以上语句?求教上述信息

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
""你按空字符串的规则切切出来肯定是一个个的啊。
\\A代表\A 匹配输入的开头。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马