Androidで(を使用して)明確に定義されたXMLファイルを解析しているときに、非常に多くの文字列比較を使用していることに気づかずにはいられませんXmlPullParser
。
現在のところ、通常は次のようになります(やや簡略化されています)。
...
tag = parser.getName().toLowerCase();
if ("tag1".equals(tag)) {
// Do something with the state machine
}
else if ("tag2".equals(tag)) {
// Do something else with the state machine
}
...
else if ("tag23".equals(tag)) {
// Do something more with the state machine
}
代わりに私が欲しいのは次のようなものです(StringMatcherが私にとって架空のハッピーメーカーになるでしょう):
private static final StringMatcher tagMatcher = new StringMatcher(StringMatcher.NO_MATCH);
static {
tagMatcher.addString("tag1", 1);
tagMatcher.addString("tag2", 2);
....
tagMatcher.addString("tag23", 23);
}
...
tag = parser.getName().toLowerCase();
switch (tagMatcher.match(tag)) {
case 1:
// Do something with the state machine
break;
case 2:
// Do something else with the state machine
break;
...
case 23:
// Do something more with the state machine
break;
default:
Log.e("PARSER", "Unexpected tag: " + tag);
break;
}
ご覧のとおりUriMatcher
、XMLファイルタグにパターンを適用したいと思います。私がAndroidで使用できるそのようなクラスを知っている人はいますか?文字列に対する他の高速フィルタリングも同様に機能します(ただし、UriMatcherパターンを再利用できれば問題ありません)。
これまで正規表現を見てきましたが、自分のニーズに合うかどうかはわかりません(switch-caseスタイルのテストが必要です)。もちろん、上記の例に示すような正規表現の比較も可能です。
乾杯、-dbm