CodeGym /课程 /JAVA 25 SELF /字符转义

字符转义

JAVA 25 SELF
第 9 级 , 课程 1
可用

1. 基本特殊字符与转义

在编程中,字符串不仅由字母组成,还包含特殊字符:引号、换行、制表符,有时甚至是像 \n\t 这样的转义标记。比如你想在字符串里写 你好, "user"!,编译器会立刻疑惑:“字符串里面的引号,是不是错误?”这时就需要转义机制了。

在 Java 中,转义是为字符串中的某些字符“赋予特殊含义”的方式。为此使用反斜杠 \(backslash)。

经典转义序列:

序列 说明 演示
\n
换行 按下 Enter
\t
制表符(Tab) Tab
\\
字面量“反斜杠”
\
\"
字符串中的双引号
"
\'
单引号(在字符串中很少需要)
'
\r
回车符(旧式换行,很少使用)
\0
空字符(NUL) (不可见)
\b
Backspace(删除前一个字符——在控制台并不总是生效)

工作原理

我们写几行包含转义字符的字符串,看看它们的实际效果。

System.out.println("你好,\"用户\"!");
// 输出: 你好,"用户"!

System.out.println("C:\\Program Files\\MyApp");
// 输出: C:\Program Files\MyApp

System.out.println("第 1 行\n第 2 行");
// 输出:
// 第 1 行
// 第 2 行

System.out.println("我\t喜欢\t制表符!");
// 输出:
// 我         喜欢    制表符!

就这样,借助一个简单的反斜杠(\),你就能把几乎任何特殊字符“带进”字符串里,而不会让编译器或队友产生恐慌。

2. 多行字符串与换行

我们经常需要写多行消息或 ASCII 艺术。最直接的方式——在普通字符串里使用 \n

System.out.println("第一行\n第二行\n第三行");

不过这并不总是方便,因此 Java 引入了文本块(Text Blocks)。它们以三引号 """ 开始,允许不转义地编写多行文本并保留格式——对 JSON、SQL 和 HTML 来说再合适不过。


// 多行字面量(Text Block)
String json = """
    {
        "name": "Alice",
        "age": 30,
        "skills": ["Java", "SQL", "Cloud"]
    }
    """;

System.out.println(json);
Java 中的文本块 """

借助文本块,你还能轻松创建包含引号的多行文本,无需重复转义。

3. Unicode——Java 如何存储世界上的任意字符

在现代世界里,我们不仅使用拉丁字母,还使用西里尔字母、汉字、数学符号,甚至表情符号。这一切都得益于字符编码系统——Unicode

什么是 Unicode?

Unicode 是一个国际标准,它为每个字符分配唯一编号(code point),与语言和平台无关。借此你可以在 Java 中同时使用西里尔文字、英文、中文汉字,甚至罕见的特殊符号。

不同语言的字符串示例:

System.out.println("Hello, 世界! 你好! مرحبا!");

字符串中的 Unicode 符号

你可以直接写出编码支持的任意字符,或使用形如 \uXXXX 的转义序列,其中 XXXX 是4位十六进制的字符编码。

System.out.println("符号: \u263A"); // 将输出 😊

对于编码大于 65535 的字符(例如许多表情),会使用一对代理项(UTF-16):

// 符号 😊(码位 1F60A)由两个 char 表示
System.out.println("笑脸: \uD83D\uDE0A"); // 将输出 😊

这有什么用?

  • 你可以存储并处理任何文本。
  • 可以放心混合多种语言与非常规符号——Java 对 Unicode 开箱即用。
  • 在面向国际用户和非标准字母表的场景中尤为重要。

4. 表情符号与特殊符号

现代字符串不仅包含字母,还包含表情符号(emoji)!例如,你想给用户发送一条带“笑脸”的愉快消息。

如何在字符串中加入表情?

直接在字符串中插入 emoji:

System.out.println("你好! 😊");

使用 Unicode 码: 对于大多数表情可以使用代理项对(surrogate pairs)。

System.out.println("这是一只猫:\uD83D\uDC31"); // 🐱

由于 UTF-16 的原因,表情在字符串中可能占用两个字符。因此在某些操作(例如获取长度)时可能出现“意外”:

String s = "😊";
System.out.println(s.length()); // 输出 2,而不是 1!

这是因为一个 Unicode 码位在 Java 中由两个 char 编码。要正确处理字符,请使用码位及相应的方法,而不是简单的 length()

5. 坑点与常见错误

错误 1:在字符串中错误地使用引号。 如果不对内部引号进行转义,编译器会“认为”字符串已经结束。

System.out.println("他说: "你好!""); // 错误!

正确:

System.out.println("他说: \"你好!\"");

错误 2:路径里只写了一个反斜杠。 在 Java 中,\ 用于表示特殊字符(\n\t\f 等)。因此字符串 "C:\Temp\file.txt" 会被误解。

System.out.println("C:\Temp\file.txt"); // 错误或意外结果

正确:

System.out.println("C:\\Temp\\file.txt"); // 双反斜杠

错误 3:忽视文本块。 从 Java 15 开始请使用文本块——这会大大简化多行字符串的处理。

String path = """
    C:\Temp\file.txt
    """;
System.out.println(path);

核心规则:始终转义特殊字符与引号。这能避免隐蔽 bug,并节省大量调试时间。

评论 (2)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Anonymous #11758813 级别 5,Ningbo,China
21 三月 2026
你好,世界! \u2600\uFE0F\uD83D\uDE0A
ncksllpo 级别 44,Cherkasy,Ukraine
9 一月 2026
没有给Unicode序列