网站首页 > java教程 正文
在文本块中转义双引号仅在我们想要嵌入三个双引号的序列(""")时才是必要的,如下所示:
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\\" = ?
""";
您可以在捆绑的代码中检查结果。现在,让我们看看如何以编程方式转换转义序列。
- 上一篇: C语言转义字符(c语言转义字符合法判断)
- 下一篇: java转义字符面试题总结(java转义符号)
猜你喜欢
- 2024-10-13 Java正则表达式(java正则表达式匹配换行符)
- 2024-10-13 JAVA面试考点合集!常用关键字及修饰符
- 2024-10-13 Java基础入门(Character类)(java character.isletter)
- 2024-10-13 好程序员Java培训分享Java之命名、标示符、变量
- 2024-10-13 JAVA新特性(二)文字块(java文字是什么类型)
- 2024-10-13 “全栈2019”Java第十六章:下划线在数字中的意义
- 2024-10-13 基础教程:Java Character类(java教程 chm)
- 2024-10-13 “全栈2019”Java异常第五章:finally关键字(应用场景)详解
- 2024-10-13 “全栈2019”Java第十四章:二进制、八进制、十六进制
- 2024-10-13 Java零基础程序阅读五(java基础入门课后编程题)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)