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();
}
相关文章推荐
- Java替换字符串中的“\"”的处理方法(String.replaceAll的源码分析)
- java中String.replaceAll()的使用
- java replaceall方法替换String的几种特殊情况
- JS正则表达式怎样实现Java中String.replaceAll的效果
- java stringreplace与replaceAll区别
- Java String.replaceAll()的方法
- Java String.replace() VS replaceAll()
- Java String replaceALL 字符转义
- Java:String 字符串的替换函数 replace replaceAll replaceFirst
- Java String.replaceAll() 与后向引用(backreference)
- Java String.replaceAll()方法
- JAVA中string.replace和string.replaceAll的区别及用法
- 探究java中String.replaceAll方法把换行符(\n)替换为明文显示(\n)为何需要四个反斜杠(\\\\n)
- JAVA中string.replace()和string.replaceAll()的区别及用法
- java,String.replaceAll中在替换路径(含有/或者/)容易出现的问题
- java String.replaceAll()
- java replaceall 用法:处理特殊字符
- JAVA中string.repalce()和string.replaceAll()有什么区别?
- java String.replaceAll中特殊字符问题
- JS正则表达式怎样实现Java中String.replaceAll的效果