value = encoded ?decodeString(content,mark+1,i-mark-1,charset) :content.substring(mark+1,i);
int l=i-mark-1; value = l==0?"": (encoded?decodeString(content,mark+1,l,charset):content.substring(mark+1,i));
    public static void decodeTo(String content, MultiMap map, String charset)    {        if (charset==null)            charset=StringUtil.__UTF8;        synchronized(map)        {            String key = null;            String value = null;            int mark=-1;            boolean encoded=false;            for (int i=0;i<content.length();i++)            {                char c = content.charAt(i);                switch (c)                {                  case '&':                      value = encoded                          ?decodeString(content,mark+1,i-mark-1,charset)                          :content.substring(mark+1,i);                                            mark=i;                      encoded=false;                      if (key != null)                      {                          map.add(key,value);                          key = null;                          value=null;                      }                      else if (value!=null)                      {                          map.add(value,null);                          value=null;                      }                      break;                  case '=':                      if (key!=null)                          break;                      key = encoded                          ?decodeString(content,mark+1,i-mark-1,charset)                          :content.substring(mark+1,i);                      mark=i;                      encoded=false;                      break;                  case '+':                      encoded=true;                      break;                  case '%':                      encoded=true;                      break;                }                            }                        if (key != null)            {                value =  encoded                    ?decodeString(content,mark+1,content.length()-mark-1,charset)                    :content.substring(mark+1);                map.add(key,value);            }            else if (mark<content.length())            {                key = encoded                    ?decodeString(content,mark+1,content.length()-mark-1,charset)                    :content.substring(mark+1);                map.add(key,"");            }        }    }