Java String Decode decode(String s)

Here you can find the source of decode(String s)

Description

decode

License

Open Source License

Declaration

public static String decode(String s) 

Method Source Code

//package com.java2s;
/*//from   w  w  w.  j  ava 2 s  . c o m
 * Copyright 2000-2013 Enonic AS
 * http://www.enonic.com/license
 */

import java.io.UnsupportedEncodingException;

public class Main {
    public static String decode(String s) {

        boolean needToChange = false;
        StringBuffer sb = new StringBuffer();
        int numChars = s.length();
        int i = 0;

        while (i < numChars) {
            char c = s.charAt(i);
            switch (c) {
            case '+':
                sb.append(' ');
                i++;
                needToChange = true;
                break;
            case '%':
                /*
                 * Starting with this instance of %, process all consecutive
                 * substrings of the form %xy. Each substring %xy will yield
                 * a byte. Convert all consecutive bytes obtained this way
                 * to whatever character(s) they represent in the provided
                 * encoding.
                 */

                try {

                    // (numChars-i)/3 is an upper bound for the number
                    // of remaining bytes
                    byte[] bytes = new byte[(numChars - i) / 3];
                    int pos = 0;

                    while (((i + 2) < numChars) && (c == '%')) {
                        bytes[pos++] = (byte) Integer.parseInt(s.substring(i + 1, i + 3), 16);
                        i += 3;
                        if (i < numChars) {
                            c = s.charAt(i);
                        }
                    }

                    // A trailing, incomplete byte encoding such as
                    // "%x" will cause an exception to be thrown

                    if ((i < numChars) && (c == '%')) {
                        throw new IllegalArgumentException("URLDecoder: Incomplete trailing escape (%) pattern");
                    }

                    sb.append(new String(bytes, 0, pos, "UTF-8"));
                } catch (UnsupportedEncodingException uee) {
                    return null;
                } catch (NumberFormatException e) {
                    throw new IllegalArgumentException(
                            "URLDecoder: Illegal hex characters in escape (%) pattern - " + e.getMessage());
                }
                needToChange = true;
                break;
            default:
                sb.append(c);
                i++;
                break;
            }
        }

        return (needToChange ? sb.toString() : s);
    }
}

Related

  1. decode(String cipherText)
  2. decode(String in)
  3. decode(String name)
  4. decode(String s)
  5. decode(String s)
  6. decode(String s)
  7. decode(String s)
  8. decode(String s)
  9. decode(String s)