您的位置:首页 > 编程语言 > Java开发

java String replaceAll 对 “+”,“?”的处理

2007-07-04 16:47 141 查看

String str = "WmqcdY0eoe6tKKvUrW+35g==";




str = str.replaceAll("+","%2B);




//将“+”转换为%+16进制

使用上面的方法对“+”进行替换时出现如下异常信息:


java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0


+


^


at java.util.regex.Pattern.error(Unknown Source)


at java.util.regex.Pattern.sequence(Unknown Source)


at java.util.regex.Pattern.expr(Unknown Source)


at java.util.regex.Pattern.compile(Unknown Source)


at java.util.regex.Pattern.<init>(Unknown Source)


at java.util.regex.Pattern.compile(Unknown Source)


at java.lang.String.replaceAll(Unknown Source)

用Google反复查找之后找到了问题的原因,String 在替换“+”和“?”时需要做一下特殊的处理。




/** *//**


*


* @param source 需要处理的字符串


* @param oldString 需要被替换的字符


* @param newString 替换后的字符


* @return


* 比如 需要替换字符串中的?


* String str = "Who am I ?";


* replace(str,"?","%3F");


*/


public static String replace(String source, String oldString,




String newString) ...{


StringBuffer output = new StringBuffer();


int lengthOfSource = source.length();


int lengthOfOld = oldString.length();


int posStart = 0;


int pos; //




while ( (pos = source.indexOf(oldString, posStart)) >= 0) ...{


output.append(source.substring(posStart, pos));


output.append(newString);


posStart = pos + lengthOfOld;


}




if (posStart < lengthOfSource) ...{


output.append(source.substring(posStart));


}


return output.toString();


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: