今天工作的时候,遇到了个奇怪的问题,是关于字符串转义与替换的。最后终于解决了,特总结
下。

小demo,

package com.westward;

public class Demo {

    
    /**
     * 1.将字符串  "a    b"替换为"a 1b".ab之间不是空格,是制表符。
     * 2.将字符串  "a\tb"替换为"a 2b".
     * */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String string1= "a\tb";
        System.out.println("string1 ="+ string1);
        String string2= "a\\tb";
        System.out.println("string2 ="+ string2);
        System.out.println("---------转换开始-----------");
        string1= string1.replaceAll("\\t", " 1");
        string2= string2.replaceAll("\\\\t", " 2");
        System.out.println("format:string1 ="+ string1);
        System.out.println("format:string2 ="+ string2);
        
    }

}

output:
string1 =a b
string2 =a\tb
---------转换开始-----------
format:string1 =a 1b
format:string2 =a 2b

总结:

java语言,字符串中的反斜杠\是转义字符的意思,而不是反斜杠本身。所以我们如果想打印出反斜杠本身,必须\\。前面一个是转义字符,将后面的转义字符转义为反斜杠本身,有点绕。

特别需要注意的是,我们在控制台打印出比如字符串:xyz\txxx,那么我们必须敏感的认识到,代码中的字符串肯定不是打印出来的原样,而应该是 xyz\\txxx。同样的,如果控制台打印出的字符串是:xyz  xxx,(中间是制表符),那么代码中的字符串应该是:xyz\txxx或者xyz  xxx。

注意看上面的demo,当我们需要将字符串中的某部分替换成另一部分时,用到了String的replaceAll()这个方法,这个方法的第一个参数是正则表达式。这里我们需要注意:

java中,\是转义字符,在正则表达式(正则表达式本身也相当于一门语言,不仅仅java有,其他语言也有)中,\也是转义字符。正则表达式中\t表示制表符,那么在java中表示此正则表达式制表符,就必须这样来表示:\\t.  如果我们需要表示正则中的\t本身(而不是制表符)呢?我们需要这样来表示:\\\\t.其实,它翻译成正则,就是\\t,第一个反斜杠转义第二个,第三个反斜杠转义第四个,正则中,\\t第一个反斜杠将第二个反斜杠转义为反斜杠本身,原理和java语言一样。 

 

posted on 2016-05-10 00:11  WesTward  阅读(2786)  评论(0编辑  收藏  举报