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

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,Google)