为什么我在使用Pattern类来识别字符串是否有效时会收到错误?

时间:2015-03-25 15:05:48

标签: java regex

package app;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ValidIdentifierDemo 
{
    public static void main(String s[])
    {
        Pattern p=new Pattern.compile("[a-z A-z][a-z A-Z 0-9]+"); // error here
        Matcher m=p.matcher("int"); //2 or s[0] in place of int?

        if (m.find() && m.group().equals(s[0])) // 3 why s[0] shouldn't i use "int"
        {
            System.out.println("Valid");

        }
        else
        {
            System.out.println("InValid");

        }
    }
}

为什么我应该在// 2 // 3

中使用s[0]

显示输出

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
    at app.ValidIdentifierDemo.main(ValidIdentifierDemo.java:11)

2 个答案:

答案 0 :(得分:2)

你必须这样做:

Pattern p = Pattern.compile("[a-z A-z][a-z A-Z 0-9]+");

即。删除new关键字,因为.compile()方法会为您生成 Pattern

答案 1 :(得分:2)

删除new关键字。

Pattern p = Pattern.compile("[a-z A-z][a-z A-Z 0-9]+");

Pattern的构造函数不可访问,并且Pattern的静态调用初始化了新的Pattern.compile(String pattern)

同样调用构造函数需要在构造函数名称后面加括号,并在括号之间包含一个参数列表(如果适用)。