You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java词法分析器:分号、逗号为独立token的正则表达式求助

Java词法分析器:将分号/逗号作为独立Token的正则分割方案

你需要的正则表达式可以同时处理空格分隔,以及将分号、逗号拆分为独立token,无需使用StringTokenizer。

解决方案

使用以下正则表达式进行分割:

String[] tokens = input.split("\\s+|(?<=;|,)|(?=;|,)");

正则说明

  • \\s+:匹配1个或多个空白字符,作为分隔符,分割后空白字符会被排除在结果外
  • (?<=;|,):反向零宽断言,匹配分号/逗号之后的位置,确保这些符号会被单独拆分为一个token
  • (?=;|,):正向零宽断言,匹配分号/逗号之前的位置,保证符号前的内容和符号本身被分割开

代码示例

import java.util.Arrays;

public class LexerDemo {
    public static void main(String[] args) {
        String input = "return a = 25; int x,y; z = 100";
        // 执行分割
        String[] tokens = input.split("\\s+|(?<=;|,)|(?=;|,)");
        // 过滤可能出现的空字符串(比如输入首尾有空格的情况)
        tokens = Arrays.stream(tokens).filter(token -> !token.isBlank()).toArray(String[]::new);
        
        // 输出所有token
        for (String token : tokens) {
            System.out.printf("Token: '%s'%n", token);
        }
    }
}

测试输出

Token: 'return'
Token: 'a'
Token: '='
Token: '25'
Token: ';'
Token: 'int'
Token: 'x'
Token: ','
Token: 'y'
Token: ';'
Token: 'z'
Token: '='
Token: '100'

为什么之前的方案不行?

  • split("[; ]"):会把分号和空格当作分隔符直接丢弃,导致分号不会出现在结果数组中
  • split("((?<=;)|(?=;))"):仅处理了分号的分割逻辑,没有整合空格的分隔规则,因此无法拆分空格分隔的内容

内容的提问来源于stack exchange,提问作者Heena Mirchandani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 23:27:12