专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java修炼终极指南:06 在文本块中转义引号和行终止符

temp10 2024-10-13 09:34:22 java教程 11 ℃ 0 评论


在文本块中转义双引号仅在我们想要嵌入三个双引号的序列(""")时才是必要的,如下所示:

Java修炼终极指南:06 在文本块中转义引号和行终止符

String txt = """  
             She told me   
                    \"""I have no idea what's going on\"""   
             """;


转义"""可以写成\"""。不要写成\"\"\"。生成的字符串将如下所示:

She told me  
        """I have no idea what's going on"""


每当您需要嵌入"或""时,只需这样做:

String txt = """  
             She told me   
                     "I have no idea what's going on"  
             """;  
String txt = """  
             She told me   
                     ""I have no idea what's going on""   
             """;


因此,即使它可以工作,也不要这样做,因为没有必要:

String txt = """  
             She told me   
                     \"I have no idea what's going on\"  
             """;  
String txt = """  
             She told me   
                     \"\"I have no idea what's going on\"\"   
             """;


然而,像""""(其中第一个"表示双引号,最后一个"""表示文本块的关闭分隔符)这样的构造将引发错误。在这种情况下,您可以在"""前放置一个空格,如" """,或将双引号转义为\""""。根据定义,文本块表示跨越多行的字符串字面量,因此无需显式转义行终止符(如\n、\r或\f)。只需在文本块中添加新行文本,编译器将处理行终止符。当然,这并不意味着使用它们不起作用。例如,可以通过\n获得包含交错空行的文本块,如下所示:

String sql = """  
             SELECT "public"."employee"."first_name",\n  
                    "public"."employee"."last_name", ?\n  
             FROM "public"."employee"\n  
             WHERE "public"."employee"."job_title" = ?  
             """;


因此,在文本块中使用转义序列(例如,\b、\t、\r、\n、\f等)可以像在旧式字符串字面量中一样进行。例如,这里没有问题:

String txt = """  
              \b\bShe told me\n  
             \t""I have no idea what's going on""   
             """;


但是,同样的事情可以在不使用转义序列的情况下获得(考虑\t(TAB)为8个空白字符):

String txt = """  
              She told me  
                        
                     ""I have no idea what's going on""   
             """;


您可以在捆绑的代码中练习所有这些示例。

让我们快速总结另一个文本块的最佳实践:显式添加转义序列可能会降低文本块的可读性,因此请谨慎使用它们,仅在真正需要保持可读性时才使用它们。例如,在文本块中显式使用\n和\"很少是必要的。

谈到\n行终止符(新行)时,重要的是要注意以下说明。

在Java中,最常用的行终止符可能是\n(Unix,换行符,LF),但我们也可以使用\r(Windows,回车符,CR)或\n\r(Windows,回车换行符,CRLF)。无论我们喜欢哪一个,Java文本块总是使用\n(LF)。首先,编译器将所有未通过转义序列显式添加的换行符标准化为\n(LF)。其次,在线终止符标准化和缩进管理之后,编译器将像处理任何字符串字面量一样处理所有显式转义序列(\n(LF)、\f(换页符,FF)、\r(CR)等)。实际上,这允许我们在文本块中复制包含转义序列的旧Java字符串,而无需进一步修改即可获得预期的结果。

如果您需要使用特定于您操作系统的行终止符,则必须在文本块规范化后通过String.replaceAll()显式替换它,如String::replaceAll("\n", System.lineSeparator())。在文本块中嵌入转义序列可以通过\\构造像往常一样进行。以下是一个将\"转义序列嵌入为\\的示例:

String sql = """  
  SELECT \\"public\\".\\"employee\\".\\"first_name\\",     
         \\"public\\".\\"employee\\".\\"last_name\\", ?  
  FROM \\"public\\".\\"employee\\"  
  WHERE \\"public\\".\\"employee\\".\\"job_title\\" = ?  
""";


您可以在捆绑的代码中检查结果。现在,让我们看看如何以编程方式转换转义序列。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表