java有哪些字符需要转译
在 Java 中,当使用正则表达式相关的方法(如 String.split()
、Pattern.matcher()
等)时,某些字符具有特殊含义,需要通过转义(在前面加 \
)来表示其字面意义。需要转义的字符主要包括以下几类:
-
正则表达式元字符(共 12 个):
.
:匹配任意字符(除换行符)*
:匹配前面的子表达式零次或多次+
:匹配前面的子表达式一次或多次?
:匹配前面的子表达式零次或一次^
:匹配输入字符串的开始位置$
:匹配输入字符串的结束位置|
:表示“或”关系(
和)
:标记子表达式的开始和结束[
和]
:标记字符集的开始和结束{
和}
:标记限定符的开始和结束
示例:要匹配字符串中的
*
,需要写成\\*
(Java 中用两个反斜杠,第一个是 Java 字符串的转义,第二个是正则的转义)。 -
反斜杠
\
本身:
反斜杠在 Java 字符串中是转义字符,若要表示一个字面意义的反斜杠,需要用\\\\
(两个反斜杠在 Java 中表示一个实际的反斜杠,在正则中再转义一次)。 -
其他特殊场景:
- 在字符集
[]
中,除了-
(表示范围)、^
(表示非)、]
(结束符)外,其他元字符通常不需要转义。例如[.*+]
中的.
、*
、+
会被当作普通字符。
- 在字符集
示例代码:
public class RegexEscapeExample {public static void main(String[] args) {// 匹配点号 .String str1 = "a.b.c";String[] parts1 = str1.split("\\."); // 转义后按点号分割System.out.println(Arrays.toString(parts1)); // 输出 [a, b, c]// 匹配星号 *String str2 = "x*y*z";String[] parts2 = str2.split("\\*"); // 转义后按星号分割System.out.println(Arrays.toString(parts2)); // 输出 [x, y, z]// 匹配反斜杠 \String str3 = "a\\b\\c";String[] parts3 = str3.split("\\\\"); // 用四个反斜杠匹配一个反斜杠System.out.println(Arrays.toString(parts3)); // 输出 [a, b, c]}
}
总结:在使用正则相关方法时,遇到上述元字符需要转义,转义方式是在字符前加 \\
(Java 字符串中)。非正则场景下(如普通字符串拼接),不需要转义这些字符。