不知道题主是不是这个意思,开始遍历字符串流,然后碰到=,就添加key,碰到&就添加value,如果碰到”就找下一个”
import java.io.IOException;
import java.io.StringReader;
import java.text.ParseException;
import java.util.TreeMap;
public class Test {
public static void readQuoteString(StringBuilder sb,StringReader isr) throws ParseException, IOException{
int c;
while((c=isr.read())!='\"') {
if(c==-1) {
throw new ParseException("引号未完结",-1);
}
sb.append((char)c);
}
sb.append((char)c);
}
public static MapgetMapByStream(StringReader isr) throws IOException, ParseException{
Map map=new TreeMap<>();
char c;
int v;
while((v=isr.read())!=-1) {
StringBuilder key=new StringBuilder();
StringBuilder value=new StringBuilder();
c=(char) v;
while(c!='=') {
if(v==-1) {
throw new ParseException("key未完结",-1);
}
key.append(c);
if(c=='\"') {
readQuoteString(key,isr);
}
c=(char) v;
}
c=(char) v;
while(c!='&') {
if(v==-1) {
break;
}
value.append(c);
if(c=='\"') {
readQuoteString(value,isr);
}
c=(char) v;
}
map.put(key.toString(), value.toString());
}
return map;
}
public static void main(String[]args) throws IOException, ParseException {
StringReader reader=new StringReader("key=val\"=\"luo&123=fds\"&&&&&\"asfa");
Map map=getMapByStream(reader);
System.out.println(map);
}
}