คัดลอกรหัสรหัสดังต่อไปนี้:
//กลยุทธ์การแยกวิเคราะห์ อาจเป็นการแยกสตริง json อาจเป็นที่อยู่รูปภาพ อีเมล ฯลฯ ในข้อมูล
packagecc.util.regex;
RegexPolicy สาธารณะ enum {
Json("เจสัน")
รูปภาพ("ImageFromHtml");
ค่าสตริงส่วนตัว
RegexPolicy (ค่าสตริง) {
this.value = ค่า;
-
@แทนที่
สตริงสาธารณะ toString() {
// TODO ต้นขั้ววิธีการสร้างอัตโนมัติ
ค่าส่งคืน;
-
-
packagecc.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;
-
* คลาสคงที่ช่วยในการวิเคราะห์ข้อมูล
* @ผู้เขียน wangcccong
* @เวอร์ชั่น 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 สุดท้าย ข้อมูลสตริงสุดท้าย) {
สวิตช์ (นโยบาย) {
caseJson:
กลับ regexJson (ข้อมูล);
ภาพกรณี:
หยุดพัก;
ค่าเริ่มต้น:
หยุดพัก;
-
กลับเป็นโมฆะ;
-
-
* โดยการแยกวิเคราะห์สตริง Json ซ้ำ ๆ รับชื่อสตริง Json ตามนิพจน์ทั่วไป
* ดูเพิ่มเติมที่ Matcher และ Pattern และการวิเคราะห์ข้อมูล หากข้อมูลการวิเคราะห์วัตถุ JsonObject ส่งคืนคู่ค่าคีย์ (Map)
* หากส่งคืนรายการ JsonArray มิฉะนั้นจะส่งคืน 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 (สตริงสุดท้าย jsonStr) {
ถ้า (jsonStr == null) โยน NullPointerException ใหม่ ("JsonString ไม่ควรเป็น null");
พยายาม {
ถ้า (isJsonObject (jsonStr)) {
รูปแบบรูปแบบสุดท้าย = Pattern.compile (REGULAR_JSON_ITEM_NAME);
Matcher สุดท้าย matcher = pattern.matcher(jsonStr);
แผนที่สุดท้าย <String, Object> map = ใหม่ HashMap <String, Object> ();
JSONObject สุดท้าย jsonObject = JSONObject ใหม่ (jsonStr);
สำหรับ ( ; matcher.find(); ) {
สตริง groupName = matcher.group(1);
วัตถุ obj = jsonObject.opt (ชื่อกลุ่ม);
ถ้า (obj != null && isJsonArray(obj.toString()))
matcher.region(matcher.end() + obj.toString().replace("//", "").length(), matcher.regionEnd());
ถ้า (obj != null && !map.containsKey(groupName))
map.put(ชื่อกลุ่ม, regexJson(obj.toString()));
-
แผนที่ขากลับ;
} อื่นถ้า (isJsonArray(jsonStr)) {
รายการ <วัตถุ> รายการ = ใหม่ ArrayList<วัตถุ>();
JSONArray jsonArray = JSONArray ใหม่ (jsonStr);
สำหรับ (int i = 0; i < jsonArray.length(); i++) {
วัตถุ วัตถุ = jsonArray.opt(i);
list.add(regexJson(object.toString()));
-
รายการส่งคืน;
-
} จับ (ข้อยกเว้นจ) {
// สิ่งที่ต้องทำ: จัดการข้อยกเว้น
Log.e("RegexUtil--regexJson", e.getMessage()+"");
-
กลับ jsonStr;
-
-
* เพื่อตรวจสอบว่าสตริงเป็น JsonObject {@link org.json.JSONObject} หรือไม่
* @param jsonStr {@link java.lang.String}
* @return บูลีน
-
isJsonObject บูลีนคงที่ส่วนตัว (สตริงสุดท้าย jsonStr) {
ถ้า (jsonStr == null) คืนค่าเท็จ;
พยายาม {
JSONObject ใหม่ (jsonStr);
กลับเป็นจริง;
} จับ (JSONException จ) {
// TODO บล็อก catch ที่สร้างขึ้นอัตโนมัติ
e.printStackTrace();
กลับเท็จ;
-
-
-
* เพื่อตรวจสอบว่าสตริงเป็น JsonArray {@link org.json.JSONArray} หรือไม่
* @param jsonStr {@link java.lang.String}
* @return บูลีน
-
isJsonArray บูลีนคงที่ส่วนตัว (สตริงสุดท้าย jsonStr) {
ถ้า (jsonStr == null) คืนค่าเท็จ;
พยายาม {
JSONArray ใหม่ (jsonStr);
กลับเป็นจริง;
} จับ (JSONException จ) {
// TODO บล็อก catch ที่สร้างขึ้นอัตโนมัติ
e.printStackTrace();
กลับเท็จ;
-
-
-
//วิธีใช้
วัตถุวัตถุ = RegexUtil.regex(RegexPolicy.Json, jsonStr.substring(jsonStr.indexOf("{"),
jsonStr.lastIndexOf("}")+1));
ถ้า (อินสแตนซ์ของวัตถุของสตริง) {
Log.e("string", object.toString());
} อื่นถ้า (อินสแตนซ์วัตถุของแผนที่) {
@SuppressWarnings("ไม่ได้เลือก")
HashMap<String, Object> map = (HashMap<String, Object>)วัตถุ;
ตัววนซ้ำ<รายการ<สตริง วัตถุ>> ตัววนซ้ำ = map.entrySet().iterator();
ในขณะที่ (iterator.hasNext()) {
รายการ <สตริง วัตถุ> รายการ = iterator.next();
ถ้า (entry.getValue() อินสแตนซ์ของรายการ) {
Log.e(entry.getKey(), entry.getValue().toString());
} อื่น {
Log.e(entry.getKey(), entry.getValue().toString());
-
-
} อื่นถ้า (อินสแตนซ์วัตถุของรายการ) {
Log.e("รายการ", object.toString());
-