我刚开始在工作中使用 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()
关于java - Matcher find() 方法返回 StringOutOfBounds 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25996144/