Скопируйте код кода следующим образом:
//Стратегия анализа, это может быть анализ строки json, это может быть адрес изображения, адрес электронной почты и т. д. в данных
пакетcc.util.regex;
публичное перечисление RegexPolicy {
Json("Джсон"),
Изображение("ИзображениеИзHtml");
частное строковое значение;
RegexPolicy (строковое значение) {
это.значение = значение;
}
@Override
публичная строка 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;
/**
* Статический класс помогает анализировать данные.
* @author wangcccong
* @версия 1.140122
*создать по адресу: 14-02-14
*/
общественный класс RegexUtil {
//Регулярное выражение, соответствующее стратегии синтаксического анализа
//частная статическая финальная строка REGULAR_IMG_HTML = "<img +?src=/"(.+?)/"";
частная статическая финальная строка REGULAR_JSON_ITEM_NAME = "/"([^///" ]+?)/":";
//частная статическая финальная строка REGULAR_JSON_ARRAY_NAME = ", *?/" *?([a-zA-Z0-9]*?) *?/" *?: *?//[ *?//{";
//Разбор публичного метода, просто передайте строку
публичное статическое регулярное выражение объекта (окончательная политика RegexPolicy, окончательные данные строки) {
переключатель (политика) {
случайJson:
вернуть regexJson (данные);
Изображение корпуса:
перерыв;
по умолчанию:
перерыв;
}
вернуть ноль;
}
/**
* Путем рекурсивного анализа строки Json получите имя строки Json с помощью регулярного выражения:
* см. также «Сопоставление» и «Шаблон» и анализ данных. Если объект аналитических данных JsonObject возвращает пару «ключ-значение» (Карта),
* если возвращается список JsonArray, в противном случае возвращается строка.
* <br><b>Примечание:</b> если возвращается Map, вам лучше вызвать map.get(null) для получения значения.
* @see {@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) бросает новое исключение NullPointerException («JsonString не должно быть нулевым»);
пытаться {
если (isJsonObject(jsonStr)) {
окончательный шаблон шаблона = Pattern.compile(REGULAR_JSON_ITEM_NAME);
окончательный Matcher matcher = шаблон.matcher(jsonStr);
окончательная карта Map<String, Object> map = new HashMap<String, Object>();
окончательный JSONObject jsonObject = новый JSONObject(jsonStr);
для ( ; matcher.find(); ) {
Строка groupName = matcher.group(1);
Объект 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()));
}
карта возврата;
} Еще если (isJsonArray(jsonStr)) {
List<Object> list = новый ArrayList<Object>();
JSONArray jsonArray = новый JSONArray(jsonStr);
for (int i = 0; i <jsonArray.length(); i++) {
Объект объект = jsonArray.opt(i);
list.add(regexJson(object.toString()));
}
список возврата;
}
} catch (Исключение е) {
// 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) вернуть ложь;
пытаться {
новый JSONObject(jsonStr);
вернуть истину;
} catch (JSONException e) {
// TODO Автоматически сгенерированный блок catch
е.printStackTrace();
вернуть ложь;
}
}
/**
* Чтобы определить, является ли строка JsonArray {@link org.json.JSONArray};
* @param jsonStr {@link java.lang.String}
* @return логическое значение
*/
частное статическое логическое значение isJsonArray(final String jsonStr) {
если (jsonStr == null) вернуть ложь;
пытаться {
новый JSONArray(jsonStr);
вернуть истину;
} catch (JSONException e) {
// TODO Автоматически сгенерированный блок catch
е.printStackTrace();
вернуть ложь;
}
}
}
//Как использовать
Объект объекта = RegexUtil.regex(RegexPolicy.Json, jsonStr.substring(jsonStr.indexOf("{"),
jsonStr.lastIndexOf("}")+1));
if (объект экземпляра String) {
Log.e("строка", object.toString());
} else if (экземпляр объекта Map) {
@SuppressWarnings («не отмечено»)
HashMap<String, Object> карта = (HashMap<String, Object>)объект;
Iterator<Entry<String, Object>> итератор = map.entrySet().iterator();
в то время как (итератор.hasNext()) {
Entry<String, Object> запись = iterator.next();
if (entry.getValue() список экземпляров) {
Log.e(entry.getKey(), вход.getValue().toString());
} еще {
Log.e(entry.getKey(), вход.getValue().toString());
}
}
} else if (список экземпляров объекта) {
Log.e("список", object.toString());
}