我是正则表达式和
StringTokenizer
的新手,每当我将此正则表达式放入matches
中时,我都会收到语法错误:
while ((line = br.readLine()) != null) {
StringTokenizer stringTokenizer = new StringTokenizer(line, "\n");
while (stringTokenizer.hasMoreElements()) {
String function = stringTokenizer.nextElement().toString();
if (function.matches(\\s*(unsigned int|float|int|char|void|double)(\\s)+[a-zA-Z_](\\w)*(\\s)*\\((\\s)*((((unsigned int|float|int|char|double)(\\s)*,(\\s)*)*((unsigned int|float|int|char|double)(\\s)*))|(\\s)*|(void)(\\s)*)\\)(\\s)*\\;)) {
System.out.println("VALID - ");
}
}
}
用引号将字符串括起来 " ",请注意,当使用运算符“或”(|) 表示两个连续单词时,我们应该将它们放在括号中
((unsigned int) | float)
while ((line = br.readLine()) != null) {
StringTokenizer stringTokenizer = new StringTokenizer(line, "\n");
while (stringTokenizer.hasMoreElements()) {
String function = stringTokenizer.nextElement().toString();
if (function.matches("\\s*((unsigned int)|float|int|char|void|double)(\\s)+[a-zA-Z_](\\w)*(\\s)*\\((\\s)*((((unsigned int|float|int|char|double)(\\s)*,(\\s)*)*((unsigned int|float|int|char|double)(\\s)*))|(\\s)*|(void)(\\s)*)\\)(\\s)*\\;")) {
System.out.println("VALID - ");
}
}
}
可能是复制和粘贴错误,但也可能是您缺少正则表达式周围的引号,使其成为
String
。例如:
while ((line = br.readLine()) != null) {
StringTokenizer stringTokenizer = new StringTokenizer(line, "\n");
while (stringTokenizer.hasMoreElements()) {
String function = stringTokenizer.nextElement().toString();
if (function.matches("\\s*(unsigned int|float|int|char|void|double)(\\s)+[a-zA-Z_](\\w)*(\\s)*\\((\\s)*((((unsigned int|float|int|char|double)(\\s)*,(\\s)*)*((unsigned int|float|int|char|double)(\\s)*))|(\\s)*|(void)(\\s)*)\\)(\\s)*\\;")) {
System.out.println("VALID - ");
}
}
}