Java 中的转义是由反斜杠 \ 开始的,以反斜杠开始的一串字符,称之为转义序列(escape sequence)。比如我们常见的 \n 换行。

这些转义序列对编译器有特殊的意义,下表列出 Java 的转义序列。

转义序列 描述
\t 插入一个 tab 符号。
\b 插入一个退格符。
\n 插入一个新行。
\r 插入一个回车符。
\f 插入一个换页符
\' 插入一个单引号。
\" 插入一个双引号。
\\ 插入一个反斜杠。

除了这些特定的表示之外,Java 也可以通过转义字符+八进制和十六进制数字来表示特定字符。

表示八进制

我们可以用反斜杠加八进制来表示 \[0-377] 一个 ascii 字符,这个范围是一字节(八进制的377=八位二进制的范围)。

如下例子:

\ 八进制数
Examples:
    \0, \1, \2, \3, \4, \5, \6, \7

\ 八进制数 八进制数
Examples:
    \00, \07, \17, \27, \37, \47, \57, \67, \77

\ 0-3 八进制数 八进制数
Examples:
    \000, \177, \277, \367,\377

表示 Unicode 字符

Java 也支持 Unicode 的转义字符。Unicode 转义由 \u 开始加上四位十六进制字符。指的注意的是,Java 的 Unicode 转义是这编译期间就执行了(词法分析阶段),这里给出一个例子:

public static void main(String[] args) {  
    System.out.println("\u000A");  
}

// java: unclosed string literal

运行上面的代码会抛出异常,在编译时 \u000A 会替换成换行符,因此代码会变成如下这样:

System.out.println("  
");

甚至在注释中也会被替换。

public static void main(String[] args) {  
    // \u000A111  
}

// error -> java: not a statement

转义特殊的字符

转义字符

正则表达式中的转义

正则表达式存在元字符,当我们想匹配元字符本身时,也需要用到转义,这里列出几个:

表达式 可匹配
^ 匹配 ^ 符号本身
$ 匹配 $ 符号本身
. 匹配小数点(.)本身
同时以代码举例:
public static void main(String[] args) {  
    String s = "1.3";  
    System.out.println("替换前 = " + s);  
    System.out.println("替换后 = " + s.replaceAll("\\.", ""));  
}

ref