ToolAct工具行动

Java 格式化工具

输入 Java
输出结果
行数: 1字符数: 0字节数: 0
行数: 1字符数: 0

什么是 Java 格式化?

Java 格式化工具会用一致的缩进、换行和结构整理 Java 代码,让类、方法、代码块、泛型、注解和控制流程更容易阅读。它适合处理复制来的片段、生成代码、代码评审准备、教学示例,以及因编辑器设置不同而风格混乱的文件。格式化能提升可读性和团队协作,但不会自动修复业务逻辑、编译错误、缺失 import、API 误用或项目特定风格规则。在生产仓库中使用前,应与团队 formatter、构建工具或 CI 规范对齐,避免一次格式化制造大量无意义 diff。

使用方法

使用方法

  1. 在左侧输入框粘贴或输入 Java 代码
  2. 选择缩进大小(2 空格、4 空格或 Tab)
  3. 点击「格式化」美化代码,或点击「压缩」缩减代码
  4. 在右侧查看结果(支持语法高亮)
  5. 点击「复制」将结果复制到剪贴板

选项说明

缩进大小可选择 2 空格、4 空格或 Tab 缩进方式
格式化通过合理的缩进与换行美化代码
压缩移除空白和注释以减小文件体积

代码提示

  • 格式化可提升可读性,但不会编译或进行类型检查,编辑后请执行常规构建或 IDE 检查。
  • Java 源码压缩在生产构建中极少使用;建议保留可读格式,方便代码审查、堆栈追踪及后续维护。

使用场景

代码评审前清理粘贴的 Java 代码当方法体从聊天、文档或工单评论中复制过来时,空格和换行往往不一致,这个格式化器可以快速恢复大括号和语句周围可读的缩进和换行。对于只需获得可审查格式而无需打开完整 IDE 项目的小型片段特别有用。
为文档或 bug 报告准备紧凑示例压缩模式会移除注释和多余空白,使 Java 示例可以放入 issue 字段、日志标注或复现说明中而无需滚动。由于解析和压缩完全在浏览器中完成,内部包名、半成品 DTO 或私有分支的专有代码可以在不离开页面的情况下重塑,这在分享仍包含客户标识的复现代码时很重要。
在短片段中发现明显的结构错误内置验证在检查括号平衡时会正确处理字符串、字符字面量和注释,因此能在粘贴片段到其他地方之前捕获缺失的大括号或括号。它不是编译器,但对面试练习、文档示例和独立工具方法来说是一次快速的合理性检查。
将生成代码对齐到项目缩进风格在 2 空格、4 空格和 Tab 缩进之间切换,使生成的 getter、Lombok 输出或 IDE 导出与周围文件保持一致。在整个模块运行前请先检查团队的 Google Java Style、Checkstyle 或 Spotless 配置,否则格式化会产生大量无意义的 diff。
安全格式化枚举和注解密集的代码片段带有常量、方法和注解数组的枚举在聊天中经常缩成难以阅读的文本墙。重新格式化后每个常量及其参数各占一行,然后验证重写后 import 和 public 修饰符是否仍然存在。Google Java Style 要求 4 空格缩进和 100 列行宽,而 Eclipse 默认配置使用 2 空格 Tab,IntelliJ 内置风格通常扩展到 120 列;不先检查团队配置就运行格式化器,即使代码本身没有问题也会产生 diff。Import 排序规则(静态 import 在前,然后 java.*,然后 javax.*,然后外部,然后本地)也因风格而异,泛型尖括号间距如 Map<String, List<Integer>> 与旧式 Map <String, List<Integer>> 在 Google Style 下会统一为无空格。

技术原理

Java 格式化建立在词法分析和 AST 构建之上。词法分析器逐字符扫描源码并生成 Token 流:关键字(class、public、static 等保留字)、标识符(变量名和类名)、字面量(数字、字符串、字符)、运算符(+、-、==、&& 等)、分隔符({ } ( ) ; ,)以及注释(//、/* */)。 解析器按照 Java 语言规范(JLS)将 Token 流转换为抽象语法树(AST),识别类定义、方法体、语句块、控制流结构、注解和其他语法单元。格式化器遍历 AST,按照 Google Java Style 等风格指南重新生成代码:缩进随块深度递增,行宽限制在 100 列,运算符两侧加空格,逗号后跟空格,左大括号不换行(K&R 风格)。 注解处理是 Java 格式化中的特殊情况:单个注解与方法同行;较长的注解列表按参数对齐换行,每个注解独占一行。

  • 词法分析:识别 50 个 Java 关键字、标识符、字面量、运算符和注释,输出 Token 流。
  • AST 构建:按 JLS 规则构建 AST,正确处理类、方法、控制流、Lambda 表达式和 try-with-resources。
  • 缩进规则:Google Style 默认每级 4 空格,行宽限制 100 列;超出限制的行自动换行。
  • 换行策略:较长的方法链、参数列表和注解在逗号或点号处换行,续行与上一行首个字符对齐。
  • 注解处理:单个注解保持同行;多个注解可在一行或每行一个,取决于长度和参数对齐规则。
  • 注释保留:保持 // 和 /* */ 注释在原始位置;压缩模式下可选择移除。

示例

格式化类定义

输入:  public class User{private Long id;private String name;public User(Long id,String name){this.id=id;this.name=name;}}
输出:
public class User {
  private Long id;
  private String name;

  public User(Long id, String name) {
    this.id = id;
    this.name = name;
  }
}

格式化方法链

输入:  List<String> result=list.stream().filter(s->s.startsWith("a")).map(String::toUpperCase).sorted().collect(Collectors.toList());
输出:
List<String> result = list.stream()
    .filter(s -> s.startsWith("a"))
    .map(String::toUpperCase)
    .sorted()
    .collect(Collectors.toList());

注解换行

输入:  @Override public ResponseEntity<User> getUser(@PathVariable Long id,@RequestParam(defaultValue="10") int size){...}
输出:
@Override
public ResponseEntity<User> getUser(
    @PathVariable Long id,
    @RequestParam(defaultValue = "10") int size) {
  ...
}

常见问题

使用的是哪种 Java 风格?

常见默认是 Google Java Style 或 Sun/Oracle 约定:4 空格缩进、K&R 大括号风格、100 列行宽。部分版本会提供切换风格的选项。任何风格指南的细节都很微妙——运行格式化、看输出、再锁定一份配置。

格式化器支持现代 Java 吗?

取决于解析器版本。records、sealed 类、switch 表达式、文本块和模式匹配都是较新的语法,老解析器可能不支持。试一段代码——能干净格式化就没问题;如果报错,请检查解析器版本。

它会修复 import 或未使用的变量吗?

不会。格式化只调整空白和大括号位置。静态分析(整理 import、删除未使用项)需要真正的 IDE 或像 google-java-format 这样的工具(关闭 --skip-removing-unused-imports)。

源代码会被上传吗?

不会。格式化通过基于 JS 的 Java 解析器在你的浏览器中运行,代码不会被传输。如果安全策略禁止把任何专有代码暴露给在线工具,请避免粘贴。

结果会和 IntelliJ 或 Eclipse 一致吗?

很可能不完全一致。每个 IDE 都有自己的格式化器和成千上万的选项。本页适合临时格式化;为了团队一致,请用 google-java-format 或 Spotless 等工具接入 CI 强制执行。

能压缩 Java 吗?

Java 是编译型语言——压缩在这里不像 JS 那样适用。class 文件优化是编译器和 ProGuard 在构建时做的事。本页只做源码级别的格式化。

为什么我的代码被加了空行?

许多风格指南要求类成员之间或方法之间留一个空行。格式化器会按规则插入。如果你偏好紧凑代码,请覆盖相关风格选项。