如下代码,有什么问题吗?
String inputStr = "";
Pattern pattern = Pattern.compile(
"(.|\\r|\\n)*?\\n?(.*[#\\$>\\]%])\\s*$",
Pattern.CASE_INSENSITIVE);
for (int j = 0; j < 2000; j++) {
System.out.println("j:" + j);
try {
// /String regex = "([a-z]|//d)*";
inputStr = "1" + inputStr;
System.out.println("字符串为:" + inputStr);
Matcher matcher = pattern.matcher(inputStr);
System.out.println("字符串长度为:" + inputStr.length());
boolean flag = matcher.matches();
System.out.println("匹配结果为: " + flag);
} catch (Exception e) {
System.out.println("message:" + e.getMessage());
}
}
看上去没有啥问题,但是运行到一定的数值就抛异常了
Exception in thread "main" java.lang.StackOverflowError
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168)
at java.util.regex.Pattern$Ques.match(Pattern.java:3691)
at java.util.regex.Pattern$LazyLoop.match(Pattern.java:4353)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4227)
解决的方案,匹配的字符串尽量不要超过500