Matcher find()方法返回StringOutOfBounds异常

时间:2014-09-23 13:17:13

标签: java regex indexoutofboundsexception

我刚刚开始在工作中使用Java正则表达式,并且在使用Matcher find()方法时遇到了麻烦。

在以下代码中,i是从客户端收到的String参数,' list'是一个带有字符串值的现成链表,我想在列表中找到i中所有其他列表值中最小可能索引的值(如果确实存在匹配)。列表中的值可能在其末尾有一个星号,这意味着它们有一个通配符,因此有0个或更多的单词字符'在他们的最后 - 所以我必须考虑在我搜索时。这是代码:

Pattern checkRegex;
        int tStart = i.length(); 
        for (String t : list){
            if (t.charAt(t.length()-1) == '*')
                checkRegex = Pattern.compile("\\W" + t + "[0-9A-Za-z]*\\W");
            else
                checkRegex = Pattern.compile("\\W" + t + "\\W");
            Matcher regexMatcher = checkRegex.matcher(i);
            if (regexMatcher.find()){
                if (tStart > i.indexOf(regexMatcher.regionStart()))
                    tStart = i.indexOf(regexMatcher.regionStart());
            }

我收到错误 - 线程中的异常" main" java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1

调试之后,我发现程序在regexMatcher.find()命令崩溃了 - 但由于它是一个布尔方法,我不明白String索引必须在这里做什么。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

t.length()-1是问题所在。如果t为空""怎么办? 。在致电t.charAt()

之前,您需要进行空检查和空检查