Java格式化API新增了哪些

wen java案例 1

本文目录导读:

Java格式化API新增了哪些

  1. StringTemplate (Java 21 预览特性)
  2. 自定义模板处理器
  3. FMT 模板处理器
  4. RAW 模板处理器
  5. 改进的 DateTimeFormatter
  6. NumberFormat 增强
  7. 注意

Java的格式化API在Java 21中有了重大更新,以下是主要的新增内容:

StringTemplate (Java 21 预览特性)

这是最重大的新增,提供了一种全新的字符串格式化方式:

// 使用 STR 模板处理器
String name = "Alice";
int age = 30;
String message = STR."\{name} is \{age} years old";
// 输出: "Alice is 30 years old"
// 支持表达式
int x = 10, y = 20;
String result = STR."\{x} + \{y} = \{x + y}";
// 输出: "10 + 20 = 30"
// 支持方法调用
String upper = STR."Hello \{name.toUpperCase()}";
// 输出: "Hello ALICE"

自定义模板处理器

可以创建自己的模板处理器:

// 创建 JSON 模板处理器
StringTemplate.Processor<JSONException, RuntimeException> JSON = 
    StringTemplate.Processor.of(
        st -> new JSONObject(st.interpolate())
    );
// 使用自定义处理器
String name = "Bob";
JSONObject json = JSON."""
    {
        "name": "\{name}",
        "age": 25
    }
    """;

FMT 模板处理器

结合了 String.format() 的功能:

double price = 19.99;
int quantity = 3;
String invoice = FMT."""
    Item: %-10s\{item}
    Price: $%.2f\{price}
    Quantity: %d\{quantity}
    Total: $%.2f\{price * quantity}
    """;

RAW 模板处理器

获取原始模板而不进行插值:

var st = RAW."Hello \{name}";
// 返回 StringTemplate 对象,而不是插值后的字符串

改进的 DateTimeFormatter

Java 21 增加了新的日期时间格式化选项:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("B")
    .withLocale(Locale.ENGLISH);
// B 表示"day period" (上午/下午/晚上等)

NumberFormat 增强

// 紧凑数字格式
NumberFormat fmt = NumberFormat.getCompactNumberInstance(
    Locale.US, NumberFormat.Style.SHORT);
fmt.format(1200);    // "1.2K"
fmt.format(1000000); // "1M"

注意

  • StringTemplate 在 Java 21 中是预览特性,需要使用 --enable-preview 启用
  • 后续版本(Java 22+)可能会有所调整或正式发布

这些新特性极大地提升了 Java 字符串处理的灵活性和可读性。

抱歉,评论功能暂时关闭!