我出于某种原因尝试使用Matcher
,但有时会给我PatternSyntax Exception
。我知道在我的情况下,它意味着+
是一个保留字符,应该逃避它。但我的字符串根本没有这样的字符:
Pattern p=Pattern.compile(test,Pattern.CASE_INSENSITIVE);
StringBuffer testing=new StringBuffer (node.getNodeValue());
matcher=p.matcher(testing);
if(!matcher.hitEnd())
{
if(matcher.find())
{
i++;
}
}
在Pattern p=Pattern.compile(test,Pattern.CASE_INSENSITIVE);
test
字符串只是一些字词或字符,在任何情况下都不是+
或*
等。
这里是for {循环中test
将替换为它们的单词列表:
修改
我使用了 Elliott Frisch 的答案,但是现在发生了一个奇怪的例外:
for(int j=0;j<index2;j++)
{
test = (test != null) ? test.toLowerCase() : null;
str = (str != null) ? str.toLowerCase() : "";
if (str.contains(test))
{
X[Index]= keArrayList.indexOf(test);
Index++;
}
}
int[] X=new int[100000];
private static final double[] Y=new double[100000];
for(int i=0;i<Index;i++)
{
felan=Y[X[i]];
}
这里虽然两个循环索引都比100000
小得多但是在第一次迭代中我得到了这个:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
这是与if条件有什么关系还是什么?
答案 0 :(得分:1)
您不应该使用StringBuffer
(自Java 1.5以来,StringBuilder
已被首选)。此外,您的Pattern
未被重复使用;所以编译它似乎毫无意义。最后,如果您只想测试您的node
是否与循环中的某些“测试”匹配,我建议您使用类似
String str = node.getNodeValue();
test = (test != null) ? test.toLowerCase() : null;
str = (str != null) ? str.toLowerCase() : "";
if (str.contains(test)) {
i++;
}
答案 1 :(得分:0)
您不需要使用循环计数器只需使用while语句...只需在匹配器找到匹配时打印结果...您的错误可能是因为if条件的增量...没有在没有初始化变量的if语句中原生增量。但是你没有透露所有的代码,所以我只是假设......
此外,我无法判断编译参数'test'是文字值还是变量,但参数需要 a regular expression 。
public static String list = "..."; // long list..
public static void main( String[] args ) {
Pattern pattern = Pattern.compile( ".+" ); // some pattern
Matcher matcher = pattern.matcher( list );
while( matcher.find() ) {
System.out.println( matcher.group(0));
}
}