code: public static String decode(String urlString) {
  		StringBuilder s = new StringBuilder();
  		UrlDecoderState state = UrlDecoderState.INITIAL;
  		int hiNibble = 0;
  		int lowNibble = 0;
  		int length = urlString.length();
  		for (int i = 0; i < length; i++) {
  			char c = urlString.charAt(i);
  			switch (state) {
  			case INITIAL:
  				if (c == '%') {
  					state = UrlDecoderState.FIRST_HEX;
  				} else {
  					s.append(c);
  				}
  				break;
  			case FIRST_HEX:
  				hiNibble = lookup(c);
  				state = UrlDecoderState.SECOND_HEX;
  				break;
  			case SECOND_HEX:
  				lowNibble = lookup(c);
  				byte b = (byte) ((hiNibble << 4) | lowNibble);
  				s.append((char) b);
  				state = UrlDecoderState.INITIAL;
  				break;
  			}
  		}
  		return s.toString();
  	}
docs: Like java.net.URLDecoder except no conversion of "+" to space