通过正则表达式替换字符串报 java.lang.
StackOverflowError大家可以运行下面这段测试代码看看,是不是会抛出java.lang.StackOverflowError异常,如果把str长度缩减一些倒是可以正常运行,如果在你的上没有抛出异常,请再增加str的长度试试
测试代码:
====================================
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ProgramTest {
public static void main(String[] args) throws Exception {
String str = "[quote=username]\r\n测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试n[/quote]bbbbbbbb ";
String re = "\\[quote=(.[^\\[]*)\\]((.|\\s)*)\\[\\/quote\\] ";
Pattern pattern = Pattern.compile(re);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.replaceAll( " " ));
}
}
------解决方案--------------------一样的,string太长了。
------解决方案--------------------str.indexOf( "quote ")
substring
细节可以自己考虑~~
------解决方案--------------------既然有长度限制,就饶开嘛:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) throws Exception {
int maxLen = 820;
String str = "[quote=username]\r\nn[/quote]bbbbbbbb ";
String re = "\\[quote=(.[^\\[]*)\\]((.|\\s)*)\\[\\/quote\\] ";
Pattern pattern = Pattern.compile(re);
int length = str.length() / maxLen;
String subStr = " ";
for (int i = 0; i <= length; i++) {
subStr = str.substring(i * maxLen, ((i+1)*maxLen > str.length())?str.length():(i+1)*maxLen);
Matcher matcher = pattern.matcher(subStr);
System.out.println(matcher.replaceAll( " "));
}
}
}
------解决方案--------------------public static void main(String[] args) {
String str = "[quote=username]a\r\n....n[/quote] bbbbbbbb ";
int start = -1;
int end = -1;
Pattern pattern = Pattern.compile( "\\[quote=(.[^\\[]*)\\] ");
Matcher matcher = pattern.matcher(str);
if(matcher.find()) {
start = matcher.end();
}
end = str.lastIndexOf( "[/quote] ");
if(start > -1 && end > -1) {
str = str.replace(str.substring(start, end), " ");
}
System.out.println(str);
}
------解决方案--------------------如果标记也不需要的话稍微改成:
if(matcher.find()) {
start = matcher.start();
}
end = str.lastIndexOf( "[/quote] ") + "/[quote] ".length();