作为 Codegym 大学课程一部分的导师授课片段。报名参加完整课程。
“你好,阿米戈。曾几何时,你了解到要在代码中编写一串字符,你需要将它们用双引号括起来。”
“是的,这给了我们一个字符串文字。不久前我才发现这个。”
“在我们的行业中,那是很久以前的事了。但现在这不是重点。相反,请告诉我如果我们需要在字符串文字中使用引号该怎么办?”
“嗯……一个包含引号的字符串——还有什么比这更简单的呢。我相信有一些办法……”
“是的。假设我们想要显示文本"Friends" was nominated for an "Oscar"
。我们该怎么做呢?”
“老实说,我不知道。我想不出任何东西。”
“你无法通过逻辑找到解决方案。让我告诉你该怎么做。
代码 | 笔记 |
---|---|
|
这个选项不会起作用!” |
“这个选项不起作用,因为编译器将其解释为完全不同的代码:
代码 | 笔记 |
---|---|
|
这个选项不会起作用!” |
“编译器在代码中遇到双引号后,会将后面的内容视为字符串文字的开头。下一个双引号表示字符串文字的结尾。”
“那么你如何在文字中写双引号呢?”
“有一种方法。它称为转义字符。您只需在文本字符串中写引号。在引号之前,添加\(反斜杠)符号。
“这是正确编写的字符串文字的样子:
代码 | 笔记 |
---|---|
|
这将工作! |
“编译器将正确解释所有内容,不会将反斜杠后的引号视为普通引号。
“更重要的是,如果你将这个字符串输出到屏幕上,带有反斜杠的引号将被正确处理,并且文本将在没有任何反斜杠的情况下显示:"Friends" was nominated for an "Oscar"
“嗯,我不会说这个超级方便……”
“但是你能做什么,这些是规则。另一个重要的一点。反斜杠前面的引号代表一个字符:我们只是使用巧妙的符号,不会干扰编译器识别我们的字符串文字的能力代码。您可以将引号分配给char
变量:
代码 | 笔记 |
---|---|
|
\" 是一个字符,不是两个 |
|
这也是可能的:单引号内的双引号 |
转义字符时常见的情况
“除了双引号之外,还有许多其他字符,编译器会以特殊方式处理。例如,换行符。
“我们如何为文字添加换行符?还有一个特殊的组合:
\n
“如果您需要向字符串文字添加换行符,只需添加几个字符” \n
。
例子:
代码 | 控制台输出 |
---|---|
|
|
“像这样的特殊组合一共有8种,也叫转义序列,分别是:
代码 | 描述 |
---|---|
\t |
插入制表符 |
\b |
插入退格字符 |
\n |
插入换行符_ |
\r |
插入回车符 |
\f |
插入换页符 |
\' |
插入单引号 |
\" |
插入双引号 |
\\ |
插入反斜杠 |
“你已经给我看了其中两个。其他6个是什么意思?”
“我现在就全部解释。
\t
是制表符
当文本中出现这段文字时,相当于Tab
在打字的同时按下了键。它移动其后的文本并使对齐文本成为可能。
例子:
代码 | 控制台输出 |
---|---|
|
|
\b
意思是“返回一个字符”
字符串中的这个序列相当于按下Backspace
键盘上的键。它删除它前面的字符:
代码 | 控制台输出 |
---|---|
|
|
\r
是回车符
此字符将光标移动到当前行的开头而不更改文本(取决于 JDK 版本)。接下来显示的任何内容都将覆盖现有字符串。
例子:
代码 | 控制台输出 |
---|---|
|
World!ngs |
\f
是一个换页字符
这个符号是从第一台点阵打印机时代就流传下来的。将此序列输出到打印机将导致打印机简单地送出当前页面,而不打印任何文本,直到新页面开始。
现在我们称它为分页符或新页。
\\
是反斜杠
这里的一切都很简单。如果我们使用反斜杠来转义文本中的字符,那么我们如何在字符串中写入反斜杠字符本身呢?
很简单:在文本中添加一个反斜杠——你必须连续写两个。
例子:
代码 | 控制台输出 |
---|---|
|
编译器会对未知的转义字符大喊大叫。 |
|
这样做就对了! |
“使用双斜线是有道理的。但我还不能立即记住其他所有内容。我将不得不依靠你的提示。”
“渐渐地,你会记住你需要什么。别担心。对于其他一切,有谷歌。
Unicode编码
“你已经知道屏幕上显示的每个字符都对应一个特定的数字代码。这些代码的标准化集合称为编码。
“曾几何时,当计算机刚刚发明时,七位(不到一个字节)就足以对每个字符进行编码。第一个编码仅包含 128 个字符。这种编码称为 ASCII 。 ”
“真是个奇怪的名字。”
“这没什么奇怪的,就是一个缩写。ASCII代表美国信息交换标准代码——一个标准的美国代码表,用于可打印字符和一些特殊代码。”
“它由 33 个不可打印的控制字符(影响文本和空格的处理方式)和 95 个可打印字符组成,包括数字、大写和小写拉丁字母以及几个标点符号。
“随着计算机的普及,每个国家都开始发布自己的编码。通常,他们以 ASCII 为起点,用各自字母表中的符号替换很少使用的 ASCII 字符。
“随着时间的推移,一个想法出现了:创建一个包含世界上每种编码的所有字符的单一编码。
”于是,1993年,Unicode编码被创造出来,Java语言成为第一个使用这种编码作为存储文本标准的编程语言。现在Unicode是整个IT行业的标准。
“虽然 Unicode 本身就是标准,但它有几种表示形式或 Unicode 转换格式 (UTF):UTF-8、UTF-16 和 UTF-32 等。
“Java 使用了 Unicode 编码的高级版本——UTF-16:每个字符以 16 位(2 字节)编码。它最多可容纳 65,536 个字符!您几乎可以在这种编码中找到世界上所有字母表的每个字符。 “
“我希望我不需要记住它?”
“如果你愿意,那就去吧!”
“好吧,好吧。我会使用这条规则:你不可能无所不知,但你可以谷歌一切。”
“采用合理的方法就是一切。因此,要使用其代码在程序中编写 Unicode 字符,您需要编写\u
+十六进制代码。例如,\u00A9
代码 | 控制台输出 |
---|---|
|
|
Unicode:代码点
“640 KB 应该对每个人都足够了!或者不是”。比尔盖茨曾经说过。或不。至少这句话是他说的。”
“哈哈,640kb,连一个扫地机器人的大脑都装不下。”
“生活很艰难,随着时间的推移,UTF-16 编码开始不够用了。原来有很多亚洲语言,它们有很多字形。而所有这些字形根本无法塞入 2 个字节”
“那么我们该怎么办?”
“使用更多字节!但是 char 类型只有 2 个字节,将其更改为 4 个字节并不是那么容易:全世界已经编写了数十亿行 Java 代码,如果 char 类型突然变成 4 个字节,Java 代码就会崩溃机器。所以我们不能改变字符类型!
“还有另一种方法。记住我们如何通过在字符前面放置反斜杠来转义字符。基本上,我们使用多个字符对单个字符进行编码。Java 的创建者决定使用相同的方法。
“一些在视觉上显示为单个字符的字符char
在字符串中被编码为两个 s:
代码 | 控制台输出 |
---|---|
|
🔊 |
“现在您的 Java 程序甚至可以将表情符号输出到控制台 😎”
“我一定会用它来找点乐子的!”
GO TO FULL VERSION