%n 是 string.format() 中跨平台换行符占位符,自动适配系统换行序列(windows 为 \r\n,linux/macos 为 \n),避免硬编码导致的显示异常,用法简单且无需手动判断系统。

%n 是 String.format() 中专为跨平台设计的换行符占位符,它会自动替换为当前运行 Java 虚拟机所在操作系统的本地换行序列:Windows 用 \r\n,Linux/macOS 用 \n,旧版 macOS(已基本淘汰)用 \r。
为什么不用 "\n" 或 "\r\n"
硬编码 "\n" 在 Windows 上可能显示为一行内带 ^M 符号;硬写 "\r\n" 在 Linux 终端或某些文本处理工具中可能多出多余回车。而 %n 由 JVM 运行时动态决定,无需条件判断,也无需读取 System.getProperty("line.separator")。
基本用法示例
直接在格式字符串中插入 %n,像其他占位符一样使用:
String msg = String.format("第一行%n第二行%n第三行");
System.out.print(msg);
无论代码在哪种系统上运行,输出都符合本地规范。
搭配其他占位符一起用
%n 可与其他格式符混用,位置灵活:
- 用于分隔多组数据:
String.format("姓名:%s%n年龄:%d%n城市:%s", name, age, city) - 生成多行日志或配置内容,避免拼接
+\n+的易错写法 - 构造 SQL 插入语句、CSV 内容等需严格换行的文本时更安全
注意点
%n 不接受宽度、精度等修饰(如 %5n 非法),也不支持参数索引(如 %1$n 无效)。它始终代表“此处插入系统换行符”,无额外行为。











