Java 教程
- Java - 首页
- Java - 概述
- Java - 历史
- Java - 特性
- Java 与 C++
- JVM - Java 虚拟机
- Java - JDK 与 JRE 与 JVM
- Java - Hello World 程序
- Java - 环境搭建
- Java - 基本语法
- Java - 变量类型
- Java - 数据类型
- Java - 类型转换
- Java - Unicode 系统
- Java - 基本运算符
- Java - 注释
- Java - 用户输入
- Java - 日期与时间
Java 控制语句
- Java - 循环控制
- Java - 决策机制
- Java - if-else
- Java - switch
- Java - for 循环
- Java - for-each 循环
- Java - while 循环
- Java - do-while 循环
- Java - break
- Java - continue
面向对象编程
- Java - OOPs 概念
- Java - 对象与类
- Java - 类属性
- Java - 类方法
- Java - 方法
- Java - 变量作用域
- Java - 构造函数
- Java - 访问修饰符
- Java - 继承
- Java - 聚合
- Java - 多态
- Java - 重写
- Java - 方法重载
- Java - 动态绑定
- Java - 静态绑定
- Java - 实例初始化块
- Java - 抽象
- Java - 封装
- Java - 接口
- Java - 包
- Java - 内部类
- Java - 静态类
- Java - 匿名类
- Java - 单例类
- Java - 包装类
- Java - 枚举
- Java - 枚举构造函数
- Java - 枚举字符串
Java 内置类
Java 文件处理
Java 错误与异常
- Java - 异常
- Java - try-catch 块
- Java - try-with-resources
- Java - 多重 catch 块
- Java - 嵌套 try 块
- Java - finally 块
- Java - throw 异常
- Java - 异常传播
- Java - 内置异常
- Java - 自定义异常
Java 多线程
- Java - 多线程
- Java - 线程生命周期
- Java - 创建线程
- Java - 启动线程
- Java - 线程连接
- Java - 线程命名
- Java - 线程调度器
- Java - 线程池
- Java - 主线程
- Java - 线程优先级
- Java - 守护线程
- Java - 线程组
- Java - 关闭钩子
Java 同步
Java 网络编程
- Java - 网络编程
- Java - Socket 编程
- Java - URL 处理
- Java - URL 类
- Java - URLConnection 类
- Java - HttpURLConnection 类
- Java - Socket 类
- Java -泛型
Java 集合
Java 接口
Java 数据结构
Java 集合算法
高级 Java
- Java - 命令行参数
- Java - Lambda 表达式
- Java - 发送邮件
- Java - Applet 基础
- Java - Javadoc 注释
- Java - 自动装箱和拆箱
- Java - 文件不匹配方法
- Java - REPL (JShell)
- Java - 多版本 Jar 文件
- Java - 私有接口方法
- Java - 内部类菱形运算符
- Java - 多分辨率图像 API
- Java - 集合工厂方法
- Java - 模块系统
- Java - Nashorn JavaScript
- Java - Optional 类
- Java - 方法引用
- Java - 函数式接口
- Java - 默认方法
- Java - Base64 编码解码
- Java - switch 表达式
- Java - Teeing 收集器
- Java - 微基准测试
- Java - 文本块
- Java - 动态 CDS 归档
- Java - Z 垃圾收集器 (ZGC)
- Java - 空指针异常
- Java - 打包工具
- Java - 密封类
- Java - 记录类
- Java - 隐藏类
- Java - 模式匹配
- Java - 简洁数字格式化
- Java - 垃圾收集
- Java - JIT 编译器
Java 杂项
- Java - 递归
- Java - 正则表达式
- Java - 序列化
- Java - 字符串
- Java - Process API 改进
- Java - Stream API 改进
- Java - 增强的 @Deprecated 注解
- Java - CompletableFuture API 改进
- Java - 流
- Java - 日期时间 API
- Java 8 - 新特性
- Java 9 - 新特性
- Java 10 - 新特性
- Java 11 - 新特性
- Java 12 - 新特性
- Java 13 - 新特性
- Java 14 - 新特性
- Java 15 - 新特性
- Java 16 - 新特性
Java APIs 与框架
Java 类引用
- Java - Scanner
- Java - 数组
- Java - 字符串
- Java - Date
- Java - ArrayList
- Java - Vector
- Java - Stack
- Java - PriorityQueue
- Java - LinkedList
- Java - ArrayDeque
- Java - HashMap
- Java - LinkedHashMap
- Java - WeakHashMap
- Java - EnumMap
- Java - TreeMap
- Java - IdentityHashMap
- Java - HashSet
- Java - EnumSet
- Java - LinkedHashSet
- Java - TreeSet
- Java - BitSet
- Java - Dictionary
- Java - Hashtable
- Java - Properties
- Java - Collection
- Java - Array
Java 有用资源
Java - 文本块
Java 在 Java 15 中引入了 **文本块** 作为标准特性,用于处理多行 字符串,例如 JSON/XML/HTML 等。它在 Java 13 中作为预览特性引入。
文本块允许轻松编写多行字符串,无需使用 \r\n。
文本块字符串与字符串 (String 类方法) 具有相同的方法,例如 contains()、indexOf() 和 length() 函数。
引入文本块的主要目的是更有效地声明多行字符串。在文本块之前,我们可以使用字符串连接、字符串生成器追加方法、字符串连接方法来声明多行字符串,但这种方法相当混乱。因为我们必须使用行终止符、分隔符等来标记新行。文本块提供了一种更好、更替代的方法来使用 """,三个双引号标记来定义多行字符串。
文本块语法
**文本块**是对现有 String 对象的增强,具有特殊的语法,其中字符串内容应以 """ 开头,并以换行符结尾,并以 """ 结尾。""" 内的任何内容都将按原样使用。
String textBlockJSON = """
{
"name" : "Mahesh",
"RollNO" : "32"
}
""";
等效字符串可以使用如下所示的旧语法编写
String stringJSON = "{\r\n"
+ " \"Name\" : \"Mahesh\",\r\n"
+ " \"RollNO\" : \"32\"\r\n"
+ "}";
Java 文本块示例
在这个例子中,我们使用文本块和字符串连接打印了 json 字符串。
package com.tutorialspoint;
public class Tester {
public static void main(String[] args) {
String stringJSON = "{\r\n"
+ " \"Name\" : \"Mahesh\",\r\n"
+ " \"RollNO\" : \"32\"\r\n"
+ "}";
System.out.println(stringJSON);
String textBlockJSON = """
{
"name" : "Mahesh",
"RollNO" : "32"
}
""";
System.out.println(textBlockJSON);
}
}
输出
让我们编译并运行上面的程序,这将产生以下结果:
{
"Name" : "Mahesh",
"RollNO" : "32"
}
{
"name" : "Mahesh",
"RollNO" : "32"
}
文本块字符串操作
文本块与 String 相同,可以使用 equals() 方法 或相等运算符进行比较。
// compare the content, textBlockJSON.equals(stringJSON); // compare the objects textBlockJSON == stringJSON;
文本块支持所有字符串操作,如 indexOf()、contains() 等。
// check if text block contains a provided string or not
textBlockJSON.contains("Mahesh");
// get the length of string content
textBlockJSON.length()
示例:Java 中的文本块字符串操作
在这个例子中,我们执行了各种字符串操作,并将文本块与等效字符串进行了比较。
package com.tutorialspoint;
public class Tester {
public static void main(String[] args) {
String stringJSON = "Mahesh";
String textBlockJSON = """
Mahesh""";
// compare the content
System.out.println(textBlockJSON.equals(stringJSON));
// compare the objects
System.out.println(textBlockJSON == stringJSON);
// text block supports all string operations
System.out.println("Contains: " + textBlockJSON.contains("Mahesh"));
System.out.println("indexOf: " + textBlockJSON.indexOf("Mahesh"));
System.out.println("Length: " + textBlockJSON.length());
}
}
输出
让我们编译并运行上面的程序,这将产生以下结果:
true true Contains: true indexOf: 0 Length: 6
文本块方法
**stripIndent()** - 从字符串的开头和结尾删除不必要的空格。
**translateEscapes()** - 根据字符串语法转换转义序列。
**formatted()** - 类似于 String format() 方法,支持在文本块字符串中进行格式化。
示例
考虑以下示例:
ApiTester.java
public class APITester {
public static void main(String[] args) {
String textBlockJSON = """
{
"name" : "%s",
"RollNO" : "%s"
}
""".formatted("Mahesh", "32");
System.out.println(textBlockJSON);
}
}
输出
{
"name" : "Mahesh",
"RollNO" : "32"
}