黑马程序员技术交流社区

标题: 一组关于String字符串的综合问题? [打印本页]

作者: tanlei200620    时间: 2012-2-21 16:38
标题: 一组关于String字符串的综合问题?
在实验一些东西的时候得到的很怪的结果,不懂原理,求教:代码如下:
        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
作者: 陈丹阳    时间: 2012-2-21 17:07
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("\\", "\\\\");

就会报正则表达式的错误。
--------------------------------------------------------
以上内容来源网络,表示学习了
作者: tanlei200620    时间: 2012-2-22 13:05
System.out.println(s.replaceAll("", "谭"));
System.out.println(s.replaceAll("\\A", "谭"));
String[] temp = s.split("");

主要是这些我不懂什么意思,就是编译器会怎么理解以上语句?求教上述信息
作者: 陈丹阳    时间: 2012-2-22 13:14
""你按空字符串的规则切切出来肯定是一个个的啊。
\\A代表\A 匹配输入的开头。




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