java - Matcher find() 方法返回 StringOutOfBounds 异常

标签 java regex indexoutofboundsexception

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

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

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

我得到错误 - 线程“主”java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:-1

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

感谢您的帮助。

最佳答案

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

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

关于java - Matcher find() 方法返回 StringOutOfBounds 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25996144/

相关文章:

java - 有什么理由让抽象类定义类中的每个方法?

java - 如何实现Spring Boot启动/重启页面

c# - 当我从条件组中省略 "else"时,为什么 .NET 的正则表达式引擎表现得如此奇怪?

regex - 什么时候我应该更喜欢正则表达式而不是内置字符串函数?

java - 数组 [i] = java.lang.IndexOutOfBoundsException : Invalid array range 10 to 10

java - 适合存储java项目信息的数据结构

java - 如何用索引定义派生属性?

java - 使用 Java Pattern Regex 从 WebViewClient 中解码的 mailto 中提取信息

lucene - Luke 说我的 Lucene 索引目录无效

Java Applet - ArrayIndexOutOfBoundsException