给定一个字符串,我想按照扫描的顺序匹配标记,而不是通过循环无序打印特定类型标记的所有匹配项。
目前,我在 for-each 循环中迭代一个字符串数组。我有捕获所有必要标记的正则表达式,但不是按照它们出现的顺序。
这是我所拥有的。for-each 循环调用findTokens查找所有该标记类型的函数。这是错误的,因为像这样它通过正则表达式匹配而不是它们出现的顺序来查找令牌。
for(String line: lines) {
...
findTokens(line, keyword);
findTokens(line, identifier);
findTokens(line, number);
}
这是我的 findTokens 函数。它接受一个字符串和一个正则表达式。它检查 Regex 参数是否等于 Regex 声明之一(未显示)。
public static void findTokens(String str, String regex) {
String keyword = "(else)+|(if)+|(int)+|(return)+|(void)+|(while)+|(main)+";
String identifier = "\\b(?!(else)|(if)|(int)|(return)|(void)|(while)|(main))\\b[a-zA-Z]+";
String number = "[\\d]+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
if (regex.equals(keyword) ) {
while ( matcher.find() ) { System.out.println("Keyword: " + matcher.group()); }
} else if ( regex.equals(identifier) ) {
while ( matcher.find() ) { System.out.println("ID: " + matcher.group()); }
} else if ( regex.equals(number) ) {
while ( matcher.find() ) { System.out.println("NUM: " + matcher.group()); }
}
}
预期输出:
INPUT: int g 4 cd int u int v
keyword: int
ID: g
NUM: 4
ID: cd
keyword: int
ID: u
keyword: int
ID: v
实际输出:
INPUT: int g 4 cd int u int v
keyword: int
keyword: int
keyword: int
ID: g
ID: cd
ID: u
ID: v
NUM: 4
撒科打诨
相关分类