Java 字符串拆分未返回正确的值

2022-09-01 19:36:40

我正在尝试解析一个txt文件,该文件表示要在递归下降解析器中使用的语法。txt 文件将如下所示:

SPRIME ::= Expr eof
Expr ::= Term Expr'
Expr' ::= + Term Expr' |- 术语 expr' |e

为了隔离左侧并将右侧拆分为单独的生产规则,我采用每条线并调用:

String[] firstSplit = line.split("::=");
String LHS = firstSplit[0];
String productionRules = firstSplit[1].split("|");

但是,当我调用第二个拆分方法时,我返回的不是由“|”字符分隔的字符串数组,而是右侧每个独立字符的数组,包括“|”。例如,如果我正在解析 Expr' 规则并打印生产规则数组,它看起来像这样:

"+"
“Term”
“Expr'”
“”
|”

当我真正想要的东西应该看起来像这样:

  • Term Expr'

有人知道我做错了什么吗?


答案 1

参数 to 是正则表达式,竖线字符是特殊的。String.split()

尝试用反斜杠转义它:

String productionRules = firstSplit[1].split("\\|");

注意:需要两个反斜杠,因为反斜杠字符本身在字符串文本中是特殊的。


答案 2

由于将正则表达式作为参数,因此您必须转义所有非预期的正则表达式符号。split