0

0

如何使用Java的String.indent(n)调整文本缩进_Java 12新特性

P粉602998670

P粉602998670

发布时间:2026-03-10 05:59:12

|

372人浏览过

|

来源于php中文网

原创

string.indent() 对 null 输入直接抛出 nullpointerexception 而非返回 null;indent(-n) 是逐行移除最多 n 个前导空格,不校验是否足够;换行符兼容各平台但需预先标准化;大文本大缩进易引发 oom。

如何使用java的string.indent(n)调整文本缩进_java 12新特性

String.indent() 为什么返回 null 而不是报错

因为 indent()null 输入不做防御性检查,直接抛出 NullPointerException —— 它只处理字符串内容,不处理引用本身。常见错误是把未判空的 String 变量直接传入,比如日志拼接或配置读取后立刻调用:configValue.indent(4),而 configValue 实际为 null

实操建议:

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

  • 务必在调用前检查: if (str != null) str.indent(n)
  • 别依赖 IDE 自动补全的“看起来安全”,indent() 不像 Objects.toString() 那样自带空值兜底
  • 如果上游可能为空,优先用 Optional.ofNullable(str).map(s -> s.indent(n)).orElse("")

indent(0) 和 indent(-1) 的行为差异

indent(0) 等价于原字符串(不加也不删空格),但 indent(-1) 不是“反向缩进”,而是按行移除最多 1 个前导空格(注意:只对每行生效,且仅移除空格,不处理制表符)。容易误以为负数能“去缩进”,结果发现缩进没变、甚至部分行被截断。

实操建议:

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

  • indent(-n) 实际是「逐行 trim 前 n 个空格」,若某行只有 2 个空格却用 indent(-4),那 2 个全被删,不会报错也不会补空
  • 需要真正“去缩进到最小公共前缀”,得用 String.lines().map(String::stripLeading).collect(Collectors.joining("\n"))indent() 不负责这个
  • 负数参数慎用:它不校验是否“足够缩进”,"a".indent(-100) 结果仍是 "a"

换行符兼容性:Windows / Linux / macOS 下表现一致吗

一致,但前提是你的字符串里换行符本身就是标准化的。indent()\n 切分行(内部用 String.lines()),所以如果原始字符串含 \r\n(Windows 风格),它会被识别为单个换行符,缩进仍正确添加;但若手动拼接了混合换行符(如 "line1\r\nline2\nline3"),lines() 会把 \r\n\n 都当作分隔符,导致行数变多、缩进应用次数变多。

letterdrop
letterdrop

B2B内容营销自动化平台,从创意到产生潜在客户的内容的最佳实践和工具。

下载

实操建议:

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

  • 调用前统一换行符:用 str.replaceAll("\r\n", "\n").replaceAll("\r", "\n")
  • 避免从旧系统读取文本后直传 indent(),尤其注意 Properties 文件、INI 配置等可能带 \r
  • 输出时若需 Windows 风格,缩进后再整体替换: result.replace("\n", "\r\n")

性能陷阱:大文本 + 大缩进值会卡住吗

会,但卡点不在缩进逻辑本身,而在字符串重复拼接。例如 str.indent(1000),如果原字符串有 1 万行,就会生成 1 万个长度为 1000 的空格字符串(每个都是新对象),再逐行拼接——JVM 堆压力陡增,GC 频繁,甚至 OOM。

实操建议:

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

  • 缩进值别硬写超大常量,如 indent(5000);真需要宽缩进,先确认是否可改用制表符("\t".repeat(n/4) 更省内存)
  • 超长文本(>10MB 或 >10 万行)慎用 indent(),改用流式处理:逐行读、逐行缩进、逐行写文件
  • 注意 indent() 返回的是全新字符串,原字符串不可变,别在循环里反复调用还保留旧引用

最易被忽略的一点:缩进是“每行开头加空格”,不是“整体左移”。如果你的字符串末尾有换行符(比如以 "\n" 结尾),indent() 会在最后一行(空行)也加缩进——这常导致 JSON 或 XML 格式化后多出一个缩进空行,解析器不报错但肉眼难察觉。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

454

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

331

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

990

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

253

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1564

2023.10.24

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

59

2026.03.06

热门下载

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

精品课程

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

共23课时 | 4.2万人学习

C# 教程
C# 教程

共94课时 | 11万人学习

Java 教程
Java 教程

共578课时 | 79.3万人学习

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

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