public static String encodeNonCodes(String string) {
        Matcher matcher = nonCodes.matcher(string);
        StringBuffer buf = new StringBuffer();

        // FYI: we do not use the no-arg matcher.find()
        // coupled with matcher.appendReplacement()
        // because the matched text may contain
        // a second % and we must make sure we
        // encode it (if necessary).
        int idx = 0;
        while (matcher.find(idx)) {
            int start = matcher.start();
            buf.append(string.substring(idx, start));
            buf.append("%25");
            idx = start + 1;
        }
        buf.append(string.substring(idx));
        return buf.toString();
    }
public static String encodeNonCodes(String string) {
        Matcher matcher = nonCodes.matcher(string);
        StringBuffer buf = new StringBuffer();

        
        
        
        
        
        int idx = 0;
        while (matcher.find(idx)) {
            int start = matcher.start();
            buf.append(string.substring(idx, start));
            buf.append("%25");
            idx = start + 1;
        }
        buf.append(string.substring(idx));
        return buf.toString();
    }
public static String encodeNonCodes ( String string ) { Matcher matcher = nonCodes . matcher ( string ) ; StringBuffer buf = new StringBuffer ( ) ; // FYI: we do not use the no-arg matcher.find()
 // coupled with matcher.appendReplacement()
 // because the matched text may contain
 // a second % and we must make sure we
 // encode it (if necessary).
 int idx = 0 ; while ( matcher . find ( idx ) ) { int start = matcher . start ( ) ; buf . append ( string . substring ( idx , start ) ) ; buf . append ( "%25" ) ; idx = start + 1 ; } buf . append ( string . substring ( idx ) ) ; return buf . toString ( ) ; }
Encode '%' if it is not an encoding sequence

@param string
@return
Encode % if it is not an encoding sequence