string.indent()是java 12引入的多行字符串缩进方法,支持正负整数参数:正数添加空格、负数移除空格(不足则清空),保留空行与换行符,null抛异常;推荐配合stripindent()实现优雅对齐。

String.indent() 是 Java 12 引入的便捷方法,专为多行字符串缩进设计,能自动处理每行前导空白、保留空行、跳过 null,并支持负缩进(即减少缩进)。它比手动拼接或正则替换更安全、语义更清晰。
理解 indent() 的行为逻辑
该方法接收一个 int 参数 indent,表示每行要添加或移除的空格数:
- 正数:在每行开头插入对应数量的空格(含空行)
- 负数:从每行开头最多移除对应数量的空格(若某行空格不足,则整行清空;空行保持为空)
- null 输入会抛出 NullPointerException
- 不修改换行符类型( 、 均保持原样)
基础用法:统一增加缩进
适用于格式化日志、生成代码片段或美化输出:
示例:String text = "line1 line2 line3";<br>String indented = text.indent(4);<br>// 结果:<br>// " line1<br>// line2<br>// line3"
注意:原有缩进被保留,新缩进是“叠加”而非“覆盖”。如果希望标准化缩进(如全部对齐到 4 空格),需先用 stripIndent() 清理原始缩进(Java 15+),再用 indent()。
配合 stripIndent() 实现“优雅对齐”(推荐组合)
当文本来自三重引号字符串字面量(Java 15+)或带缩进的模板时,先清理再缩进更可控:
示例(模拟 Java 15+ 风格写法):String raw = """<br> Hello<br> World<br> !<br> """;<br>String aligned = raw.stripIndent().indent(2);<br>// → " Hello World !"
即使没有三重引号,也可用 Pattern.compile("^\s+").matcher(line).replaceFirst("") 手动去首空格,但 stripIndent() 更简洁可靠。
谨慎使用负缩进:避免意外清空
负值适合“反向缩进”,例如取消临时包装的缩进层级:
示例:String wrapped = " if (x > 0) {
doSomething();
}";<br>String unwrapped = wrapped.indent(-4);<br>// → "if (x > 0) {
doSomething();
}"
关键点:第二行原为 8 个空格,减去 4 后剩 4 个;末行原为 4 个,减完后为 0。若某行只有 2 个空格却执行 indent(-4),该行将变为空字符串(不是 null)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











