Ric*_*kes 20 java string parsing
我正在尝试解析一个表示要在递归下降解析器中使用的语法的txt文件.txt文件看起来像这样:
SPRIME :: = Expr eof
Expr :: = Term Expr'Expr
':: = + Term Expr'| - Term Expr'| Ë
为了隔离左侧并将右侧分成单独的生产规则,我采取每一行并致电:
String[] firstSplit = line.split("::=");
String LHS = firstSplit[0];
String productionRules = firstSplit[1].split("|");
Run Code Online (Sandbox Code Playgroud)
但是,当我调用第二个split方法时,我没有返回由"|"分隔的字符串数组 字符,但右侧是每个独立字符的数组,包括"|".例如,如果我正在解析Expr'规则并打印了productionRules数组,它将如下所示:
"+"
"Term"
"Expr""
""
"|"
当我真正想要的应该是这样的:
任何人都有任何想法,我做错了什么?
Aln*_*tak 53
参数to String.split()是正则表达式,竖线字符是特殊的.
尝试使用反斜杠转义它:
String productionRules = firstSplit[1].split("\\|");
Run Code Online (Sandbox Code Playgroud)
注意:需要两个反斜杠,因为反斜杠字符本身在字符串文字中是特殊的.
Pri*_*ley 11
您需要转义|作为regex OR运算符的pipe()符号.
String productionRules = firstSplit[1].split("\\|");
Run Code Online (Sandbox Code Playgroud)
要么
String productionRules = firstSplit[1].split(Pattern.quote("|"));
Run Code Online (Sandbox Code Playgroud)
管道字符是"或"的正则表达式运算符.你想要的是什么
String productionRules = firstSplit[1].split("\\|");
Run Code Online (Sandbox Code Playgroud)
它告诉它寻找一个实际的管道角色.
| 归档时间: |
|
| 查看次数: |
17921 次 |
| 最近记录: |