将 String.format 调用转换为 String#formatted 的简单方法?

gen*_*ser 5 java intellij-idea

从 Java 15 开始,String.format 可以替换为 String#formatted。

有没有一个简单的方法来代替这个

String.format("%s foo %s bar", bar(), foo());
Run Code Online (Sandbox Code Playgroud)

IntelIJ IDEA Ultimate 中有这个吗?

"%s foo %s bar".formatted(bar(), foo());
Run Code Online (Sandbox Code Playgroud)

Nik*_*las 3

对于此特定代码,您可以在 IntelliJ Idea 中按ctrl+并单击图标来使用正则表达式替换。R.*

在此输入图像描述

  • 正则表达式(参见演示):String.format\((\".*\")?\, ?(.*)\);
  • 替换(在同一个演示中):$1.formatted\($2\);

我必须提醒您要这样做的多个原因:

  • 仅仅因为这些方法是新的就更换它是没有意义的,也不会带来任何好处。代码不会变得更可维护、更可读,甚至更快。
  • 你确定你需要这个方法吗?此方法的优点是,当字符串的格式模式是连续构建的时,因此该formatted方法由于直接使用而很舒适。我在另一个答案中对此进行了描述。
  • 在如此大规模的情况下,基于正则表达式的替换并不安全可靠。正则表达式本身也很大程度上取决于格式化模式本身是否缺少奇怪的字符。否则,您将花费大量时间来完善正则表达式。

如果您愿意,更好的方法是找到这些方法并手动替换它们。ctrl在这种情况下,请使用+ shift+进行全文搜索F,并根据以下模式进行搜索:

String\.format
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述