JavaRush /Java 博客 /Random-ZH /转义字符

转义字符

已在 Random-ZH 群组中发布
你好!在前面的讲座中,我们已经熟悉了字符串,字符串由Java中的类表示String。您可能还记得,字符串是字符序列。符号可以是任何东西——字母、数字、标点符号等等。最主要的是,在创建字符串时,整个序列都用引号引起来:
public class Main {
   public static void main(String[] args) {
       String sasha = new String ("Меня зовут Саша, мне 20 лет!");
   }
}
但是,如果我们需要创建一个内部也包含引号的字符串,会发生什么情况呢?例如,我们想告诉世界我们最喜欢的书:
public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - "Сумерки" Стефани Майер");
   }
}
编译器似乎对某些事情不满意!您认为错误的原因可能是什么?为什么会出现特别带有引号的错误?事实上,编译器以严格定义的方式感知引号,即,它将字符串包装在其中。每次他看到一个字符时",他都期望后面会出现相同的字符,并且在它们之间会有他(编译器)必须创建的行的文本。在我们的例子中,“Twilight”一词周围的引号位于其他引号内。当编译器遇到这段文本时,它根本不明白他们想从中得到什么。似乎有一个引号,这意味着它应该创建一个字符串。但他已经在这么做了!正是这个原因。简而言之,此时编译器误解了他们想要从中得到什么。 “另一个引用?这是某种错误吗?我已经创建了一个字符串!或者我应该创建另一个字符串?呃......:/” 当引用是它的命令时,我们需要向编译器解释(“创建一个字符串!”),当它是一个简单的符号时(“显示单词“Twilight”以及引号!”)。为了实现这一点,Java 使用字符转义。这是使用特殊字符完成的。像这样:\。在日常生活中它被称为“反斜杠”,但在Java中它(与要转义的字符组合)被称为转义序列。例如,\"这里是一个用于在屏幕上显示引号的控制序列。在代码中遇到这样的结构后,编译器会理解这只是一个需要在屏幕上显示的“引号”字符。让我们尝试用这本书来改变我们的代码:
public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - \"Сумерки\" Стефани Майер");
       System.out.println(myFavoriteBook);
   }
}
我们用 . 转义了两个“内部”引号\。让我们尝试运行该方法main()...控制台输出:

Моя любимая книга - "Сумерки" Стефани Майер
太棒了,代码完全按照需要工作了!引号远不是我们可能需要字符转义的唯一情况。例如,我们想向某人介绍我们的工作:
public class Main {
   public static void main(String[] args) {
       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\Work Projects\java");
       System.out.println(workFiles);
   }
}
又犯了一个错误!你能猜出原因是什么吗?编译器再次不明白该怎么做。毕竟符号对他来说无非就是一个控制序列\而已!它期望斜杠后面应该有一些必须以某种特殊方式解释的字符(例如,引号)。然而,这里遵循的是常规字母。于是编译器又混乱了。该怎么办?和上次一模一样:只需在我们的中再添加一个即可! \\\
public class Main {

   public static void main(String[] args) {

       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\\Work Projects\\java");
       System.out.println(workFiles);

   }
}
让我们看看会产生什么结果:控制台输出:

Мои рабочие файлы лежат в папке D:\Work Projects\java
极好的!编译器立即确定这些\是普通字符,需要与其余字符一起输出到控制台。Java 中有相当多的转义序列。这是他们的完整列表:
  • \t 制表符。
  • \b 文本中的回车字符后退一步或删除一行中的一个字符(退格键)。
  • \n 换行符。
  • \r 回车符。
  • \f 页面运行。
  • \' 单引号字符。
  • \" 双引号字符。
  • \\反斜杠字符 (\)。
因此,如果编译器在文本中遇到一个符号\n,它会明白这不仅仅是一个需要输出到控制台的符号和字母,而是一个特殊的命令——“换行!” 例如,如果我们想将一首诗输出到控制台,这对我们很有用:
public class Main {
   public static void main(String[] args) {
       String borodino = new String ("Скажи-ка, дядя, \nВедь не даром \nМосква, спаленная пожаром, \nФранцузу отдана?");
       System.out.println(borodino);
   }
}
这就是我们得到的: 控制台输出:

Скажи-ка, дядя, 
Ведь не даром 
Москва, спаленная пожаром, 
Французу отдана?
正是所需要的!编译器识别出转义序列并输出一段 4 行的诗句。

统一码

您需要了解的与字符转义相关的另一个重要主题是UnicodeUnicode是一种字符编码标准,包含了世界上几乎所有书面语言的字符。换句话说,这是一个特殊代码列表,其中几乎任何语言的任何字符都有一个代码!当然,这个列表非常大,没有人能记住它:)如果您对它的来源和为什么需要它感兴趣,请阅读关于Habrahabr的信息丰富的文章。Unicode中所有的字符编码都是“字母u+十六进制数字”。例如,著名的版权符号由代码u00A9表示。因此,如果您在 Java 中处理文本时需要使用此字符,您可以在文本中对其进行转义!例如,我们想让大家知道本次讲座的版权归 JavaRush 所有:
public class Main {
   public static void main(String[] args) {
       System.out.println("Лекция \"Экранирование символов\", \u00A9 2018 Javarush");
   }
}
控制台输出:

Лекция "Экранирование символов", © 2018 Javarush
太棒了,一切顺利!但特殊字符并不是一切!使用 Unicode 和字符转义,您可以同时对用不同语言编写的文本进行编码。甚至是同一种语言的几种不同方言!
public class Main {
   public static void main(String[] args) {

       System.out.println("\u041c\u0430\u0301\u043e " +
               "\u0426\u0437\u044d\u0434\u0443\u0301\u043d " +
               "\u0028\u043a\u0438\u0442\u002e \u0442\u0440\u0430\u0434\u002e " +
               "\u6bdb\u6fa4\u6771\u002c \u0443\u043f\u0440\u002e " +
               "\u6bdb\u6cfd\u4e1c\u002c \u043f\u0438\u043d\u044c\u0438\u043d\u044c\u003a " +
               "\u004d\u00e1\u006f \u005a\u00e9\u0064\u014d\u006e\u0067\u0029 " +
               "\u2014 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 " +
               "\u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 " +
               "\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 " +
               "\u0434\u0435\u044f\u0442\u0435\u043b\u044c \u0058\u0058 \u0432\u0435\u043a\u0430\u002c " +
               "\u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u043a " +
               "\u043c\u0430\u043e\u0438\u0437\u043c\u0430\u002e");
   }
}
控制台输出:

Ма́о Цзэду́н (кит. трад. 毛澤東, упр. 毛泽东, пиньинь: Máo Zédōng) — китайский государственный и политический деятель XX века, главный теоретик маоизма.
在这个例子中,在知道字符代码的情况下,我们编写了一个由西里尔字母和三种(!)不同类型的书写汉字组成的字符串 - 古典、简体和拉丁(拼音)。基本上就是这样!现在您对字符转义已经有了足够的了解,可以在工作中使用这个工具了:)如果一切还不完全清楚,我建议您阅读这篇文章:它将是一个很好的补充。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION