复制代码 代码如下:
//解析策略,有可能是解析json字符串,有可能为数据中的图片地址,email等
package cc.util.regex;
public enum RegexPolicy {
Json("Json"),
Image("ImageFromHtml");
private String value;
RegexPolicy (String value) {
this.value = value;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return value;
}
}
package cc.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;
public class RegexUtil {
//与解析策略相匹配的正则表达式
//private static final String REGULAR_IMG_HTML = " private static final String REGULAR_JSON_ITEM_NAME = ""([^\" ]+?)":";
//private static final String REGULAR_JSON_ARRAY_NAME = ", *?" *?([a-zA-Z0-9]*?) *?" *?: *?\[ *?\{";
//公用方法解析,将字符串传入即可
public static Object regex(final RegexPolicy policy, final String data) {
switch (policy) {
case Json:
return regexJson(data);
case Image:
break;
default:
break;
}
return null;
}
private static Object regexJson(final String jsonStr) {
if (jsonStr == null) throw new NullPointerException("JsonString shouldn't be null");
try {
if (isJsonObject(jsonStr)) {
final Pattern pattern = Pattern.compile(REGULAR_JSON_ITEM_NAME);
final Matcher matcher = pattern.matcher(jsonStr);
final Map
final JSonObject jsonObject = new JSonObject(jsonStr);
for ( ; matcher.find(); ) {
String groupName = matcher.group(1);
Object obj = jsonObject.opt(groupName);
if (obj != null && isJsonArray(obj.toString()))
matcher.region(matcher.end() + obj.toString().replace("\", "").length(), matcher.regionEnd());
if (obj != null && !map.containsKey(groupName))
map.put(groupName, regexJson(obj.toString()));
}
return map;
} else if (isJsonArray(jsonStr)) {
List
//使用方法
Object object = RegexUtil.regex(RegexPolicy.Json, jsonStr.substring(jsonStr.indexOf("{"),
jsonStr.lastIndexOf("}")+1));
if (object instanceof String) {
Log.e("string", object.toString());
} else if (object instanceof Map) {
@SuppressWarnings("unchecked")
HashMap
Iterator
while (iterator.hasNext()) {
Entry
if (entry.getValue() instanceof List) {
Log.e(entry.getKey(), entry.getValue().toString());
} else {
Log.e(entry.getKey(), entry.getValue().toString());
}
}
} else if (object instanceof List) {
Log.e("list", object.toString());
}



