0

0

如何在Java中处理多行字符串_Java 15文本块Text Blocks语法

P粉602998670

P粉602998670

发布时间:2026-03-10 11:48:42

|

820人浏览过

|

来源于php中文网

原创

java 15+ 支持三引号文本块("""..."""),需确保 jdk≥15 且编译/运行环境配置正确;其自动去除最小前导缩进,末尾换行默认保留,编译期转为普通字符串字面量,无运行时开销。

如何在java中处理多行字符串_java 15文本块text blocks语法

Java 15+ 怎么写多行字符串才不报错

直接用三引号 """ 包裹,但必须确保 JDK 版本 ≥ 15,且编译和运行时都启用文本块支持(默认已启用)。低于 15 的版本会直接编译失败,报错信息是 error: illegal start of expressionerror: unclosed string literal

常见错误现象:粘贴了 Python 风格的三引号字符串到 Java 8/11 项目里,IDE 红标一片,连 javac 都过不了。

  • 确认版本:java -versionjavac -version 输出至少为 15.0.x
  • 如果用 Maven,检查 pom.xmlmaven.compiler.sourcemaven.compiler.target 是否设为 15 或更高
  • IntelliJ 用户需在 File → Project Structure → Project → Project SDK / Language level 设为 15 (Preview) - Text Blocks 或更高

Text Blocks 的缩进怎么算才不混进多余空格

Java 文本块自动去除前导空白的逻辑很具体:它取所有非空行的最小缩进量,再把每行开头的这部分空白全砍掉。不是“去掉左边所有空格”,也不是“按第一行缩进对齐”。

使用场景:拼 SQL、JSON 模板、HTML 片段时,希望代码缩进可读,又不想运行时多出一堆空格。

立即学习Java免费学习笔记(深入)”;

示例对比:

Beautiful.ai
Beautiful.ai

AI在线创建幻灯片

下载
String sql = """
    SELECT id, name
    FROM user
    WHERE status = ?
    """;
// 实际值是 "SELECT id, name\nFROM user\nWHERE status = ?\n"(末尾换行保留,首行缩进全去掉)
  • 空行也参与缩进计算——如果某空行缩进比其他行少,会导致整体缩进量变小,部分行可能被意外截断
  • 末尾换行符默认保留;想删掉就用 .stripTrailing(),但注意这会同时干掉内容末尾的空格
  • 如果首行是空行或只有空格,整个缩进基准会失效,导致各行原样保留(包括你写的缩进)

Text Blocks 和普通字符串拼接性能差多少

编译期就处理完了,运行时跟写死的 "a\nb\nc" 没区别,没有额外对象创建或解析开销。别担心“用了文本块就变慢”——它不是运行时 API,而是语法糖。

但要注意兼容性影响:如果你的库要支持 Java 11,就不能用文本块,否则下游用户升级 JDK 前就会编译失败。

  • 反编译 class 文件可见,文本块最终生成的是标准 String 字面量 + \n 转义序列
  • 字符串常量池行为一致,相同内容的文本块和普通字符串字面量会指向同一个 String 实例
  • 不要为了“看起来清爽”在循环里反复写文本块——虽然没运行时成本,但可读性差,且容易误加空行破坏缩进逻辑

为什么 JSON/XML 里换行后字段名总对不齐

因为文本块会忠实保留你写的换行和内部空格,但不会自动格式化内容。比如写 JSON 时手动对齐 key,结果实际字符串里多了制表符或不等宽空格,解析器可能不认。

使用场景:构造测试用的 JSON 字符串、嵌入式配置片段。

  • 避免用 Tab 缩进——不同编辑器显示宽度不同,建议全用空格
  • 如果需要严格控制格式(如校验 JSON 结构),先用文本块写,再套一层 new JSONObject(...).toString(2)(需依赖 org.json)做美化
  • XML 场景更危险:文本块里的换行会被当作文本节点,可能意外触发 Node.TEXT_NODE,调试时容易漏看

最麻烦的其实是混合场景:比如文本块里插 String.formatSTR."""..."""(Java 21 后的字符串模板),缩进规则和变量替换时机容易互相干扰,这时候宁可拆成两步——先构建干净字符串,再套进文本块。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

1133

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

381

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2132

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

380

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1663

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

585

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

440

2024.04.29

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

4

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.3万人学习

C# 教程
C# 教程

共94课时 | 11万人学习

Java 教程
Java 教程

共578课时 | 80万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号