次のようにコードをコピーします。
// 解析戦略。JSON 文字列を解析することもあれば、データ内の画像アドレス、電子メールなどであることもあります
パッケージcc.util.regex;
public enum RegexPolicy {
ジェイソン(「ジェイソン」)、
Image("ImageFromHtml");
プライベート文字列値。
RegexPolicy (文字列値) {
this.value = 値;
}
@オーバーライド
public String toString() {
// TODO 自動生成されたメソッド スタブ
戻り値;
}
}
パッケージcc.util.regex;
java.util.ArrayListをインポートします。
java.util.HashMapをインポートします。
java.util.Listをインポートします。
java.util.Mapをインポートします。
java.util.regex.Matcherをインポートします。
java.util.regex.Patternをインポートします。
org.json.JSONArray をインポートします。
org.json.JSONException をインポートします。
org.json.JSONObject をインポートします。
android.util.Logをインポートします。
/**
* データを分析するための静的クラスのヘルプ
* @著者王cccong
* @バージョン 1.140122
* 作成日: 14-02-14
*/
パブリック クラス RegexUtil {
// 解析戦略に一致する正規表現
//private static Final String REGULAR_IMG_HTML = "<img +?src=/"(.+?)/"";
private static Final String REGULAR_JSON_ITEM_NAME = "/"([^///" ]+?)/":";
//private static Final String REGULAR_JSON_ARRAY_NAME = ", *?/" *?([a-zA-Z0-9]*?) *?/" *?: *?//[ *?//{";
//パブリック メソッドの解析。文字列を渡すだけです
public static Object regex(最終 RegexPolicy ポリシー、最終文字列データ) {
スイッチ (ポリシー) {
caseJson:
regexJson(データ)を返します;
ケース画像:
壊す;
デフォルト:
壊す;
}
null を返します。
}
/**
※ Json文字列を再帰的に解析し、正規表現でJson文字列名を取得し、
* Matcher と Pattern およびデータの分析も参照してください。分析データ JsonObject オブジェクトがキー値ペア (Map) を返す場合、
* JsonArray List が返される場合は、それ以外の場合は String を返します。
* <br><b>注意:</b> Map を返す場合は、map.get(null) を呼び出して値を取得する必要があります。
* @参照 {@link java.util.regex.Matcher}、{@link java.util.regex.Pattern}
* @param jsonStr
* @return {@link java.util.Map} または {@link java.util.List} または {@link java.lang.String}
*/
プライベート静的オブジェクト regexJson(final String jsonStr) {
if (jsonStr == null) throw new NullPointerException("JsonString should not be null");
試す {
if (isJsonObject(jsonStr)) {
最終パターン pattern = Pattern.compile(REGULAR_JSON_ITEM_NAME);
最終的なマッチャー matcher = pattern.matcher(jsonStr);
最終 Map<String, Object> マップ = new HashMap<String, Object>();
最終的な JSONObject jsonObject = new JSONObject(jsonStr);
for ( ; matcher.find(); ) {
文字列グループ名 = matcher.group(1);
オブジェクト obj = jsonObject.opt(グループ名);
if (obj != null && isJsonArray(obj.toString()))
matcher.region(matcher.end() + obj.toString().replace("//", "").length(), matcher.regionEnd());
if (obj != null && !map.containsKey(groupName))
map.put(グループ名, regexJson(obj.toString()));
}
マップを返す。
else if (isJsonArray(jsonStr)) {
List<Object> list = new ArrayList<Object>();
JSONArray jsonArray = 新しい JSONArray(jsonStr);
for (int i = 0; i < jsonArray.length(); i++) {
オブジェクト object = jsonArray.opt(i);
list.add(regexJson(object.toString()));
}
リストを返す;
}
} catch (例外 e) {
// TODO: 例外を処理します
Log.e("RegexUtil--regexJson", e.getMessage()+"");
}
jsonStr を返します。
}
/**
* 文字列が JsonObject かどうかを判断するには {@link org.json.JSONObject}
* @param jsonStr {@link java.lang.String}
* @return ブール値
*/
private static boolean isJsonObject(final String jsonStr) {
(jsonStr == null) の場合は false を返します。
試す {
新しい JSONObject(jsonStr);
true を返します。
} catch (JSONException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
false を返します。
}
}
/**
* 文字列が JsonArray であるかどうかを判断するには {@link org.json.JSONArray};
* @param jsonStr {@link java.lang.String}
* @return ブール値
*/
private static boolean isJsonArray(final String jsonStr) {
(jsonStr == null) の場合は false を返します。
試す {
新しい JSONArray(jsonStr);
true を返します。
} catch (JSONException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
false を返します。
}
}
}
//使い方
オブジェクト object = RegexUtil.regex(RegexPolicy.Json, jsonStr.substring(jsonStr.indexOf("{"),
jsonStr.lastIndexOf("}")+1));
if (文字列のオブジェクトインスタンス) {
Log.e("文字列", object.toString());
else if (マップのオブジェクトインスタンス) {
@SuppressWarnings("未チェック")
HashMap<String, Object> マップ = (HashMap<String, Object>)object;
Iterator<Entry<String, Object>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Entry<String, Object> エントリ = iterator.next();
if (entry.getValue() リストのインスタンス) {
Log.e(entry.getKey()、entry.getValue().toString());
} それ以外 {
Log.e(entry.getKey()、entry.getValue().toString());
}
}
else if (リストのオブジェクトインスタンス) {
Log.e("リスト", object.toString());
}