String.indent()是Java 12引入的方法,用于多行字符串每行开头增减指定数量空格(支持正负数),空行不变,仅处理空格不处理制表符。

String.indent() 是 Java 12 引入的便捷方法,专为多行字符串(含换行符 \n)批量调整缩进设计。它不修改首行前、末行后的空白,只对**每行内容开头**插入或移除指定数量的空格(支持负数),且会自动处理空行(保留原样,不报错)。
添加统一缩进(正数参数)
传入正整数,会在每行**非空白内容前**添加对应数量的空格。注意:空行保持不变;已有缩进的行会“叠加”,不会对齐到固定列。
-
// 原始文本
String text = "line1\n line2\nline3"; -
// 缩进 2 个空格
String indented = text.indent(2);<br>// 结果:" line1\n line2\n line3"
-
// 对空行安全
"a\n\nb".indent(3) → " a\n\n b"
减少统一缩进(负数参数)
传入负数时,会对每行**尝试移除最多 |n| 个前导空格**。若某行空格不足,该行缩进减为 0(不会变负),其余行照常处理。
-
// 原始文本含混合缩进
String text = " hello\n world\nhi"; -
// 减少 2 个空格
text.indent(-2) → "hello\n world\nhi" -
// 某行只有 1 个空格,减 2 后变为 0
" x\n y".indent(-2) → "x\ny"
替代手动拼接,简化模板生成
生成带缩进的代码片段、JSON 或 XML 片段时,避免用 lines().map(...).collect() 手动处理,直接用 indent() 更简洁安全。
-
// 生成缩进后的 JSON 字段
String jsonBody = "{\n\"name\": \"Alice\",\n\"age\": 30\n}";<br>String indentedJson = jsonBody.indent(2);<br>// → " {\n \"name\": \"Alice\",\n \"age\": 30\n }" - // 不用再写循环或 Stream
注意事项与常见误区
indent() 只处理 U+0020(空格),**不识别制表符 \t 或其他空白字符**;也不保证“视觉对齐”,仅做纯空格增减。若需智能对齐(如按 tab stop),需额外逻辑。
-
// \t 不会被 indent() 当作缩进
"\tline".indent(-1) → "\tline"(无变化) -
// 首行开头的空格也会被处理(除非是全空行)
" line1\nline2".indent(-1) → "line1\nline2" - // 想保留首行缩进?先单独提取首行再处理剩余部分
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











