贝利信息

如何在 Java 中按多种规则分割字符串并提取关键词

日期:2026-01-14 00:00 / 作者:聖光之護

本文介绍一种基于正则表达式的灵活字符串分割方案,用于从混合格式(含空格分隔词、括号内逗号分隔项)的字符串中准确提取所有语义单元,并统一存入列表。适用于如 `"apple orange (banana ice cream, grape)"` 类场景。

在实际开发中,我们常需解析结构松散但有规律的自然语言式字符串——例如产品名称、成分列表或标签组合。题目中的字符串具有典型混合特征:主体部分由空格连接(视为一个整体词,如 "Apple Orange"),而括号内为逗号分隔的子项(如 "(Banana Ice Cream, Grape)"),且括号内允许含空格的多词项。目标是将括号前的全部前置内容(作为一个元素)括号内每个逗号分隔项(各自为独立元素) 合并为一个扁平列表。

推荐使用单条正则表达式实现一阶段分割,关键在于定义合理的分隔符逻辑:

合并为统一分隔符正则:

String delimiter = "\\s*,\\s*|\\s+\\(

|\\)";

该正则通过 |(或)操作符组合三类边界,使 String.split() 能一次性切分出所有目标片段。注意:此方案不校验括号匹配性(如缺失 ) 时仍会按字面分割),适用于输入格式基本可信的业务场景。

完整示例代码如下:

import java.util.*;

public class StringSplitter {
    public static List extractTerms(String input) {
        if (input == null || input.trim().isEmpty()) {
            return Collections.emptyList();
        }
        String delimiter = "\\s*,\\s*|\\s+\\(|\\)";
        return Arrays.stream(input.split(delimiter))
                .map(String::trim)
                .filter(s -> !s.isEmpty())
                .toList(); // Java 16+;若用低版本可替换为 .collect(Collectors.toList())
    }

    public static void main(String[] args) {
        String k1 = "Apple";
        String k2 = "Apple Orange";
        String k3 = "Apple (Banana, Orange, Grape)";
        String k4 = "Apple Orange (Banana, Grape)";
        String k5 = "Apple Orange (Banana Ice cream, Grape)";

        System.out.println(extractTerms(k1)); // [Apple]
        System.out.println(extractTerms(k2)); // [Apple Orange]
        System.out.println(extractTerms(k3)); // [Apple, Banana, Orange, Grape]
        System.out.println(extractTerms(k4)); // [Apple Orange, Banana, Grape]
        System.out.println(extractTerms(k5)); // [Apple Orange, Banana Ice cream, Grape]
    }
}

⚠️ 注意事项:

总结:对于题目所述「前置空格连接项 + 括号内逗号分隔项」的常见模式,该正则分割法简洁高效、可读性强,是兼顾开发效率与运行性能的实用选择。