いまどきはxmlやjsonを使った構文解析をしますが、先日URLのクエリーをURLデコードせずに取りひつようがあり、メンドクセーなーと思いながら、URLEncodedUtils.parseのソースを見ていると、java.util.Scannerというクラスを発見しました。このクラス、文字列をトークンにごとに取り出す機能があり、それを流用しました。ちなみにトークンには正規表現が使えますので、大半のことはできちゃうきがします。
ちなみに文字列の解析だけではなく、int型やdoubleなどいろんなタイプで値を取り出すことができます。
コードはこんな感じ。
try {
URI uri = new URI("http://localhost/hoge?foo1=foo1&bar1=bar1&nihonngo=%e6%97%a5%e6%9c%ac%e8%aa%9e%e3%82%82Ok");
String query = uri.getRawQuery();
List<NameValuePair> result = new ArrayList<NameValuePair>();
Scanner scanner = new Scanner(query);
scanner.useDelimiter("&");
while (scanner.hasNext()) {
final String[] nameValue = scanner.next().split("=");
if (nameValue.length == 0 || nameValue.length > 2){
}else{
String name = nameValue[0];
String value = nameValue[1];
result.add(new BasicNameValuePair(name, value));
}
}
Log.d("", result.toString());
} catch (URISyntaxException e) {
}