string.indent()按换行符切分字符串,对每行独立处理前导空白:n>0时非空行前加n空格,n

Java 的 String.indent() 方法用于批量调整字符串的缩进,它不是简单地在每行开头加空格,而是根据指定的缩进值(正数或负数)统一增减每行的空白前缀,并自动处理换行结构。关键在于:它会先按换行符切分字符串,对每一行独立处理前导空白,再合并。
indent() 的核心行为
调用 str.indent(n) 时:
- 若
n > 0:在每行**非空行**前插入n个空格(空行保持不变); - 若
n :从每行开头最多移除 <code>|n|个空格(不足则全删,不会报错); - 若
n == 0:返回原字符串(不拷贝,直接引用); - 它会保留原有换行符(
\n、等),且只影响“前导空白”,不碰行中或行尾空格。
批量缩进多行字符串的典型用法
适合处理代码片段、日志块、配置文本等需要整体缩进的场景。例如:
String code = "public class Test {\n void run() {\n System.out.println(\"hello\");\n }\n}";
想整体右移 4 个空格:
String indented = code.indent(4);
结果每行(除空行)开头新增 4 个空格,原缩进仍保留,变成:
public class Test {
void run() {
System.out.println("hello");
}
}
配合 stripIndent 实现“智能缩进对齐”
常与 String.stripIndent() 搭配使用,先去除公共前导空白,再按需重新缩进:
String raw = """
if (x > 0) {
System.out.println("yes");
}
""";
String normalized = raw.stripIndent().indent(2); // 先归零,再缩进2格
这样能避免原始字符串自带缩进干扰,让批量调整更可控、可复用。
注意边界情况和常见误区
不要误以为 indent 是“全局加空格”——它不作用于整个字符串首尾,而是逐行处理;
空行不会被跳过但也不会被添加缩进,即 "\n\n".indent(3) 还是 "\n\n";
负缩进不会导致异常,即使某行只有 1 个空格却调用 .indent(-5),也只会删掉那 1 个;
缩进值过大可能导致内存开销略增,因内部会生成新字符串,但日常使用无需担心。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











