java String replaceAll 对 “+”,“?”的处理
来源:互联网 发布:淘宝买电脑主机可靠吗 编辑:程序博客网 时间:2024/06/14 16:33
String str = "WmqcdY0eoe6tKKvUrW+35g==";
str = str.replaceAll("+","%2B);
//将“+”转换为%+16进制
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)
+
^
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();
}
*
* @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 String.replaceAll()的方法
- 浅谈Java的String.replaceAll
- java中String.replaceAll()的使用
- java中String.replaceAll()的使用
- Java String replace() 和 replaceAll()的用法
- Java String类的replaceAll方法
- java URLEncoder String.replaceAll
- java String.replaceAll()
- JAVA String.replaceAll用法
- Java String.replaceAll()方法
- AS3中对String操作的replaceAll方法
- AS3中对String操作的replaceAll方法
- String的replaceAll方法
- String的ReplaceAll方法
- Java String replaceALL 字符转义
- Java String.replace() VS replaceAll()
- 一段自己录制的Excel宏代码(画柏拉图)
- 地图输出成jpg或bmp
- 基于UDP的socket编程
- 无法删除"runauto.."文件夹的解决办法
- 从前写的操作SQL2005的类,一直在用
- java String replaceAll 对 “+”,“?”的处理
- 实现千万级数据分页的存储过程
- U-Boot在S3C2410上的移植
- 解决IE和Mozilla的布局差别的利:important
- Xen的虚拟网络接口
- .net下的web.config
- ICE Faces 开发手册翻译 (1)
- JXTA的安装和使用
- win2K3安装sql2000提示“安装程序配置服务器失败”的常见解决办法