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
相关产品推荐
相关产品推荐

