انسخ رمز الكود كما يلي:
// استراتيجية التحليل، قد تكون عبارة عن تحليل لسلسلة json، وقد يكون عنوان الصورة، والبريد الإلكتروني، وما إلى ذلك في البيانات
packagecc.util.regex;
التعداد العام RegexPolicy {
جسون ("جسون")،
صورة("ImageFromHtml");
قيمة سلسلة خاصة؛
RegexPolicy (قيمة السلسلة) {
this.value = value;
}
@تجاوز
سلسلة عامة إلى سلسلة () {
// TODO طريقة تم إنشاؤها تلقائيًا stub
قيمة الإرجاع؛
}
}
packagecc.util.regex;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
/**
* فئة ثابتة تساعد على تحليل البيانات
* @ المؤلف وانجككونج
* @الإصدار 1.140122
* إنشاء في: 14-02-14
*/
الطبقة العامة RegexUtil {
// تعبير عادي يتوافق مع استراتيجية التحليل
// سلسلة نهائية ثابتة خاصة REGULAR_IMG_HTML = "<img +?src=/"(.+?)/"";
السلسلة النهائية الثابتة الخاصة REGULAR_JSON_ITEM_NAME = "/"([^///" ]+?)/":":";
// سلسلة نهائية ثابتة خاصة REGULAR_JSON_ARRAY_NAME = ", *?/" *?([a-zA-Z0-9]*?) *?/" *?: *?//[ *?//{";
// تحليل الطريقة العامة، فقط قم بتمرير السلسلة
كائن عام ثابت regex(سياسة RegexPolicy النهائية، بيانات السلسلة النهائية) {
التبديل (السياسة) {
حالةJson:
إرجاع regexJson(data);
صورة الحالة:
استراحة؛
تقصير:
استراحة؛
}
عودة فارغة؛
}
/**
* من خلال تحليل سلسلة Json بشكل متكرر، احصل على اسم سلسلة Json من خلال التعبير العادي،
* راجع أيضًا المطابق والنمط وتحليل البيانات إذا أعاد كائن JsonObject البيانات التحليلية زوج القيمة الرئيسية (الخريطة)،
* إذا تم إرجاع قائمة JsonArray، وإلا فسيتم إرجاع String.
* <br><b>ملاحظة:</b> إذا تم إرجاع الخريطة، فمن الأفضل استدعاء 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(سلسلة نهائية jsonStr) {
if (jsonStr == null) throw new NullPointerException("لا ينبغي أن تكون JsonString فارغة");
يحاول {
إذا (isJsonObject(jsonStr)) {
نمط النمط النهائي = Pattern.compile(REGULAR_JSON_ITEM_NAME);
المطابق النهائي = Pattern.matcher(jsonStr);
Final Map<String, Object> Map = new HashMap<String, Object>();
Final JSONObject jsonObject = new JSONObject(jsonStr);
لـ ( ; matcher.find(); ) {
String groupName = matcher.group(1);
Object obj = jsonObject.opt(groupName);
إذا (obj != null && isJsonArray(obj.toString()))
matcher.region(matcher.end() + obj.toString().replace("//", "").length(), matcher.regionEnd());
إذا (obj != null && !map.containsKey(groupName))
Map.put(groupName, regexJson(obj.toString()));
}
خريطة العودة؛
} وإلا إذا (isJsonArray(jsonStr)) {
List<Object> list = new ArrayList<Object>();
JSONArray jsonArray = new JSONArray(jsonStr);
for (int i = 0; i < jsonArray.length(); i++) {
كائن الكائن = jsonArray.opt(i);
list.add(regexJson(object.toString()));
}
قائمة العودة؛
}
} قبض (الاستثناء ه) {
// TODO: التعامل مع الاستثناء
Log.e("RegexUtil--regexJson", e.getMessage()+"");
}
إرجاع jsonStr;
}
/**
* لتحديد ما إذا كانت السلسلة هي JsonObject {@link org.json.JSONObject}
* @param jsonStr {@link java.lang.String}
* @return منطقية
*/
منطقية ثابتة خاصة isJsonObject(final String jsonStr) {
إذا (jsonStr == null) يُرجع خطأً؛
يحاول {
new JSONObject(jsonStr);
عودة صحيحة؛
} التقاط (JSONException e) {
// TODO كتلة الالتقاط التي تم إنشاؤها تلقائيًا
printStackTrace();
عودة كاذبة.
}
}
/**
* لتحديد ما إذا كانت السلسلة هي JsonArray {@link org.json.JSONArray}؛
* @param jsonStr {@link java.lang.String}
* @return منطقية
*/
منطقية ثابتة خاصة isJsonArray(final String jsonStr) {
إذا (jsonStr == null) يُرجع خطأً؛
يحاول {
new JSONArray(jsonStr);
عودة صحيحة؛
} التقاط (JSONException e) {
// TODO كتلة الالتقاط التي تم إنشاؤها تلقائيًا
printStackTrace();
عودة كاذبة.
}
}
}
// كيفية الاستخدام
كائن الكائن = RegexUtil.regex(RegexPolicy.Json, jsonStr.substring(jsonStr.indexOf("{"),
jsonStr.lastIndexOf("}")+1));
إذا (مثيل كائن لسلسلة) {
Log.e("string"، object.toString());
} else if (كائن مثيل للخريطة) {
@SuppressWarnings("تم إلغاء التحديد")
HashMap<String, Object> Map = (HashMap<String, Object>)object;
Iterator<Entry<String, Object>> iterator = Map.entrySet().iterator();
بينما (iterator.hasNext()) {
Entry<String, Object> input = iterator.next();
إذا (entry.getValue() مثيل القائمة) {
Log.e(entry.getKey(),entry.getValue().toString());
} آخر {
Log.e(entry.getKey(),entry.getValue().toString());
}
}
} else if (كائن مثيل للقائمة) {
Log.e("قائمة"، object.toString());
}