2011年5月17日火曜日

[Java]文字列 or Readerから構文解析っぽいことをする

いまどきは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());
    //[foo1=foo1, bar1=bar1, nihonngo=%e6%97%a5%e6%9c%ac%e8%aa%9e%e3%82%82Ok]って出る

catch (URISyntaxException e) {
}

0 件のコメント :