正则表达式和 StringTokenizer 语法错误

问题描述 投票:0回答:3

我是正则表达式和

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 - ");
        }
    }
}
java regex stringtokenizer
3个回答
0
投票

用引号将字符串括起来 " ",请注意,当使用运算符“或”(|) 表示两个连续单词时,我们应该将它们放在括号中

((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 - ");
    }
}

}


0
投票

可能是复制和粘贴错误,但也可能是您缺少正则表达式周围的引号,使其成为

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 - ");
        }
    }
}

0
投票

matches
方法 采用
String
作为方法参数...因此,请用引号将正则表达式括起来 " " 像这样:

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)*\\;)")
© www.soinside.com 2019 - 2024. All rights reserved.