java 读取 文本块_Java文本块

java 读取 文本块

文本块是JDK增强建议( JEP 355 ),可以在JDK 13和14中用作预览语言功能。它计划在JDK 15中成为永久性功能。文本块是跨越多行并且不需要的String文字。对于大多数转义序列。

动机

在标准Java字符串中嵌入XML,JSON或SQL等格式会变得很烦人。 例如,由于需要转义,因此只有两个键的简单JSON代码片段在Java中几乎无法读取:

 String json = "{\n" + "\"name\": \"john\",\n" + "\"age\": 42\n" + "}" ; 

文本块进行救援

使用新的文本块功能,我们可以将代码重写为:

 String text = "" " { "name" : "john" , "age" : "42" } "" "; 

使用三引号(“””)打开(和关闭)文本块。 文本从下一行开始。 打开文本块后,该行的其余部分需要保持空白。

如果我们将此字符串打印到控制台,我们将看到:

 { "name" : "john" , "age" : "42"  } 

您可能已经注意到,左侧的凹痕已被去除。 这是因为文本块的处理分为三个步骤:

  • 行终止符被标准化为LF字符。 这样可以避免不同平台(例如Windows和Unix)之间的问题。
  • 附带的前导空格和所有尾随空格均被删除。 偶然的前导空格是通过找到所有行的前导空格的公共数量来确定的。
  • 转义序列被解释。 文本块可以包含与标准字符串相同的转义序列(例如\ t或\ n)。 注意,已经添加了两个新的转义序列:\ s用于显式空间,\\ <eol>作为继续指示符(稍后在\ <eol>上有更多介绍)。

如果我们明确需要前导空格,则可以使用indent()方法:

 String text = "" " { "name" : "john" , "age" : "42" } "" ".indent( 4 ); 

这会在我们的JSON代码段中添加4个额外的前导空格。 所以看起来像这样:

{ "name" : "john" , "age" : "42" } 

或者,我们可以从封闭的三引号中删除4个前导空格以产生相同的结果:

 String text = "" " { "name" : "john" , "age" : "42" } "" "; // <-- moving this 4 spaces to the left produces 4 additional leading spaces 

新的\ <eol>转义序列

使用新的\ <eol>转义序列,我们可以将单行的内容拆分为多行,而无需创建实际的行终止符。

 String text = "" " 1 2 \ 3 \ 4 5 "" "; 

结果是:

 1  2 3 4  5 

转义三引号

如果我们需要在文本块中写入三引号,则只需要转义第一引号即可:

 String text = "" " Java text blocks start with \ "" " Java text blocks start with \ "" "; 

这将产生:

 Java text blocks start with "" " Java text blocks start with 

摘要

文本块是Java编程语言的不错的补充。 通过支持多行,它们消除了对双引号转义的需要,从而可以大大提高诸如JSON,XML或SQL之类的嵌入式字符串的可读性。

建议进一步阅读:Brian Goetz的“ 文本块” 。

与往常一样,您可以在GitHub上找到所有提供的示例。

翻译自: https://www.javacodegeeks.com/2020/06/java-text-blocks-2.html

java 读取 文本块

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代理模式之虚拟代理(仅了解)

【0】README0.1&#xff09;本文全文转自 “head first 设计模式”&#xff0c;旨在了解 虚拟代理动态代理&#xff1b;0.2&#xff09;晚辈我 java.swing 烂到渣&#xff0c;没有写出干货荔枝&#xff0c;抱歉&#xff1b;【1】虚拟代理简述1&#xff09;远程代理&#xff1a;…

红黑树详细分析

转载自 coolblog 算法与数据结构“一、红黑树简介红黑树是一种自平衡的二叉查找树&#xff0c;是一种高效的查找树。它是由 Rudolf Bayer 于1972年发明&#xff0c;在当时被称为对称二叉 B 树(symmetric binary B-trees)。后来&#xff0c;在1978年被 Leo J. Guibas 和 Robert…

rest api如何创建_REST:创建资源

rest api如何创建资源创建是常见的REST API操作。 在这篇文章中&#xff0c;我们将看到如何创建单个资源。 客户要求 通常&#xff0c;通过将POST请求发送到父集合资源来创建资源。 这将使用新生成的ID创建一个新的下属资源。 例如&#xff0c;对/ projects的POST请求可用于在…

java字节码指令简介(仅了解)

【0】README0.1&#xff09;本文全文转自 “深入理解jvm”&#xff0c; 旨在了解 java字节码指令 的基础知识&#xff1b;【1】写在前面1&#xff09;由于jvm 采用面向操作数栈而不是寄存器的结构&#xff0c;所以大多数的指针都不包含操作数&#xff0c;只有一个操作码&#x…

什么是 CAS 机制

转载自 永远爱大家的 程序员小灰示例程序&#xff1a;启动两个线程&#xff0c;每个线程中让静态变量count循环累加100次。最终输出的count结果是什么呢&#xff1f;一定会是200吗&#xff1f;加了同步锁之后&#xff0c;count自增的操作变成了原子性操作&#xff0c;所以最终…

java xmpp_Java XMPP负载测试工具

java xmpp在本文中&#xff0c;我们将开发用Java编写的XMPP负载测试工具。 目录 1.简介 2. XMPP负载测试工具 3.先决条件 4. LoadXmppTest Java程序 4.1。 创建一个新的Maven项目 4.2。 创建主类 4.3。 XmppManager类 4.4。 建立 4.5。 负载测试 5.总结 6.参考 7.下载Maven项目…

jvm(7)-虚拟机类加载机制

【0】README0.1&#xff09;本文转自“深入理解jvm”&#xff0c;旨在学习 虚拟机类加载机制 的基础知识&#xff1b;【1】概述1&#xff09;类加载机制&#xff1a;虚拟机把描述类的数据从Class 文件加载到内存&#xff0c;并对数据进行校验&#xff0c;转换解析和初始化&…

什么是CAS机制?(进阶篇)

转载自 永远爱大家的 程序员小灰 这一期我们来深入介绍之前遗留的两个问题&#xff1a; Java当中CAS的底层实现 CAS的ABA问题和解决方法 首先看一看AtomicInteger当中常用的自增方法 incrementAndGet&#xff1a; public final int incrementAndGet() {for (;;) {int cur…

c++ 前缀 变量命名_前缀命名

c 前缀 变量命名如果您是第一次查看Takes或Cactoos的源代码&#xff0c;很可能会像其他命名约定一样被命名约定触发&#xff0c;这意味着大多数类名都有两个字母的前缀&#xff1a; BkSafe &#xff0c; RqFake &#xff0c; RsWithStatus &#xff0c; TkGzip等。 老实说&…

jvm(8)-虚拟机字节码执行引擎

【0】README0.1&#xff09;本文转自 “深入理解jvm”&#xff0c;旨在学习 虚拟机字节码执行引擎 的基础知识&#xff1b;【1】概述1&#xff09;物理机和虚拟机的执行引擎&#xff1a; 物理机的执行引擎是直接建立在处理器&#xff0c;硬件&#xff0c;指令集和操作系统层面上…

什么是大数据

转载自 玻璃猫 程序员小灰大数据是具有海量、高增长率和多样化的信息资产&#xff0c;它需要全新的处理模式来增强决策力、洞察发现力和流程优化能力。Big data is high volume, high velocity, and/or high variety information assets that require new forms of processing…

java 记录考勤记录_Java 14:记录

java 记录考勤记录Java 14是在几周前问世的&#xff0c;它引入了Record类型&#xff0c;它是一个不变的数据载体类&#xff0c;旨在容纳一组固定的字段。 请注意&#xff0c;这是一种预览语言功能 &#xff0c;这意味着必须使用--enable-preview标志在Java编译器和运行时中显式…

漫画:什么是HashMap

转载自 玻璃猫 程序员小灰众所周知&#xff0c;HashMap是一个用于存储Key-Value键值对的集合&#xff0c;每一个键值对也叫做Entry。这些个键值对&#xff08;Entry&#xff09;分散存储在一个数组当中&#xff0c;这个数组就是HashMap的主干。 HashMap数组每一个元素的初始值都…

jvm(10)-早期(编译期)优化

【0】README 0.1&#xff09;本文部分文字描述转自 “深入理解jvm”&#xff0c;旨在学习 早期&#xff08;编译期&#xff09;优化 的基础知识&#xff1b; 0.2&#xff09;本文部分文字描述转自&#xff1a; http://www.cnblogs.com/zhouyuqin/p/5223180.html 【1】概述 …

etl介绍与etl工具比较_ETL万岁

etl介绍与etl工具比较提取转换负载是从一个数据系统中提取数据并加载到另一个数据系统中的过程。 涉及的数据系统称为源系统和目标系统。 来自源系统的数据形状与目标系统不匹配&#xff0c;因此需要进行一些转换以使其兼容&#xff0c;该过程称为Transformation 。 转换是由m…

漫画:高并发下的HashMap

转载自 玻璃猫 程序员小灰上一期我们介绍了HashMap的基本原理&#xff0c; 这一期我们来讲解高并发环境下&#xff0c;HashMap可能出现的致命问题。HashMap的容量是有限的。当经过多次元素插入&#xff0c;使得HashMap达到一定饱和度时&#xff0c;Key映射位置发生冲突的几率会…

jvm(11)-晚期(运行期)优化

【0】README 0.1&#xff09;本文部分文字描述转自 “深入理解 jvm”&#xff0c;旨在学习 晚期&#xff08;运行期&#xff09;优化 的基础知识&#xff1b; 【1】概述 1&#xff09;即时编译器&#xff08;JITjust in time compiler&#xff09;定义&#xff1a;为了提高…

java 新功能_Java 14的新功能

java 新功能2020年3月17日&#xff0c;Oracle发布了名为Java 14的Java新版本&#xff0c;其中包括许多新功能&#xff0c;工具&#xff0c;安全性&#xff0c;调试和更新的文档方面的改进。 但是&#xff0c;Oracle还向您提供Java的较旧版本&#xff0c;因为它具有向后兼容性&a…

漫画:什么是ConcurrentHashMap

转载自 玻璃猫 程序员小灰————————————————————————前两期我们讲解了HashMap的基本原理&#xff0c;以及高并发场景下存在的问题。没看过的小伙伴可以点击下面链接&#xff1a;漫画&#xff1a;什么是HashMap&#xff1f; 漫画&#xff1a;高并发下的H…

jvm(12)-java内存模型与线程

【0】README0.1&#xff09;本文部分文字描述转自“深入理解jvm”&#xff0c;旨在学习“java内存模型与线程” 的基础知识&#xff1b;【1】概述1&#xff09;并发处理的广泛应用是使得 Amdahl 定律代替摩尔定律称为计算机性能发展源动力的根本原因&#xff1b;2&#xff09;A…