private static String replaceAll(String htmlString, String start, String end, String newString, boolean logError, boolean reportError) { StringBuffer modString = new StringBuffer(htmlString.length()); int i = 0, j = 0, j2=0; int tagFound = 0; while(true) { // first check if there are any matching start & end i = htmlString.indexOf(start, j2); if( i != -1 ) { j = htmlString.indexOf(end, i); } else { j = htmlString.indexOf(end, j2); } if ((i != -1) && (j != -1)) { tagFound++; modString.append( htmlString.substring(j2, i)).append( newString ); j2 = j + end.length();// 此处不可以改为 // j2 = modString.length();因为进行查找相同的操作时是在htmlString上// 操作的,htmlString是没有变过的。进行拼接操作的是modString. } else { modString.append( htmlString.substring(j2)); if((i != -1) && (j == -1) || (i == -1) && (j != -1)) { //hack, to report same error message as if no tags found at all. //if later determined to report a different error message if we do //find tags but the last tag is not matched, we just need //to put the logic here. tagFound = 0; } break; } } if( tagFound == 0 ) { if (logError) { // write the stack trace to the log file String msg = "No matching tag for " + start + " or " + end; EfsnNonFatalException e = new EfsnNonFatalException(msg); LogWriter.log(e); } if (reportError) { return "no matching tag found in replaceAll=" + start; } else { return htmlString; } } return modString.toString(); }
java-替换以特定字符开头 特定字符结尾的长字符串
最新推荐文章于 2024-08-29 03:49:46 发布