今天工作的时候,遇到了个奇怪的问题,是关于字符串转义与替换的。最后终于解决了,特总结
下。
小demo,
package com.westward; public class Demo { /** * 1.将字符串 "a b"替换为"a 1b".ab之间不是空格,是制表符。 * 2.将字符串 "a b"替换为"a 2b". * */ public static void main(String[] args) { // TODO Auto-generated method stub String string1= "a b"; 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 b
---------转换开始-----------
format:string1 =a 1b
format:string2 =a 2b
总结:
java语言,字符串中的反斜杠是转义字符的意思,而不是反斜杠本身。所以我们如果想打印出反斜杠本身,必须\。前面一个是转义字符,将后面的转义字符转义为反斜杠本身,有点绕。
特别需要注意的是,我们在控制台打印出比如字符串:xyz xxx,那么我们必须敏感的认识到,代码中的字符串肯定不是打印出来的原样,而应该是 xyz\txxx。同样的,如果控制台打印出的字符串是:xyz xxx,(中间是制表符),那么代码中的字符串应该是:xyz xxx或者xyz xxx。
注意看上面的demo,当我们需要将字符串中的某部分替换成另一部分时,用到了String的replaceAll()这个方法,这个方法的第一个参数是正则表达式。这里我们需要注意:
java中,是转义字符,在正则表达式(正则表达式本身也相当于一门语言,不仅仅java有,其他语言也有)中,也是转义字符。正则表达式中 表示制表符,那么在java中表示此正则表达式制表符,就必须这样来表示:\t. 如果我们需要表示正则中的 本身(而不是制表符)呢?我们需要这样来表示:\\t.其实,它翻译成正则,就是\t,第一个反斜杠转义第二个,第三个反斜杠转义第四个,正则中,\t第一个反斜杠将第二个反斜杠转义为反斜杠本身,原理和java语言一样。