package com.example.passrepo.util;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;
public class QueryStringParser {
private final String queryString;
private int paramBegin;
private int paramEnd = -1;
private int paramNameEnd;
private String paramName;
private String paramValue;
private Map<String, String> paramPairs = new HashMap<String, String>();
public QueryStringParser(String queryString) {
this.queryString = queryString;
while(next()) {
paramPairs.put(getName(),getValue());
}
}
public String getQueryParamValue(String name) {
return paramPairs.get(name);
}
private boolean next() {
int len = queryString.length();
while (true) {
if (paramEnd == len) {
return false;
}
paramBegin = paramEnd == -1 ? 0 : paramEnd+1;
int idx = queryString.indexOf('&', paramBegin);
paramEnd = idx == -1 ? len : idx;
if (paramEnd > paramBegin) {
idx = queryString.indexOf('=', paramBegin);
paramNameEnd = idx == -1 || idx > paramEnd ? paramEnd : idx;
paramName = null;
paramValue = null;
return true;
}
}
}
private String getName() {
if (paramName == null) {
paramName = queryString.substring(paramBegin, paramNameEnd);
}
return paramName;
}
private String getValue() {
if (paramValue == null) {
if (paramNameEnd == paramEnd) {
return null;
}
try {
paramValue = URLDecoder.decode(queryString.substring(paramNameEnd+1, paramEnd));
} catch (Exception ex) {
throw new Error(ex);
}
}
return paramValue;
}
}