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

来源:互联网 发布:淘宝买电脑主机可靠吗 编辑:程序博客网 时间:2024/06/14 16:33
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();
    }
原创粉丝点击