Copiez le code comme suit :
//Stratégie d'analyse, il peut s'agir d'analyser une chaîne JSON, il peut s'agir d'une adresse d'image, d'un e-mail, etc. dans les données
packagecc.util.regex ;
énumération publique RegexPolicy {
Json("Json"),
Image("ImageDeHtml");
valeur de chaîne privée ;
RegexPolicy (valeur de chaîne) {
this.value = valeur ;
}
@Outrepasser
chaîne publique versChaîne() {
// TODO Stub de méthode généré automatiquement
valeur de retour ;
}
}
packagecc.util.regex ;
importer java.util.ArrayList ;
importer java.util.HashMap ;
importer java.util.List ;
importer java.util.Map ;
importer java.util.regex.Matcher ;
importer java.util.regex.Pattern ;
importer org.json.JSONArray ;
importer org.json.JSONException ;
importer org.json.JSONObject ;
importer android.util.Log ;
/**
* Une aide de classe statique pour analyser les données
* @auteur wangcccong
* @version 1.140122
* créer au : 14-02-14
*/
classe publique RegexUtil {
//Expression régulière correspondant à la stratégie d'analyse
//String final statique privé REGULAR_IMG_HTML = "<img +?src=/"(.+?)/"";
chaîne finale statique privée REGULAR_JSON_ITEM_NAME = "/"([^///" ]+?)/": ";
//Chaîne finale statique privée REGULAR_JSON_ARRAY_NAME = ", *?/" *?([a-zA-Z0-9]*?) *?/" *?: *?//[ *?//{";
// Analyse de la méthode publique, il suffit de transmettre la chaîne
regex d'objet statique public (politique RegexPolicy finale, données de chaîne finales) {
changer (politique) {
casJson :
retourner regexJson(données);
Image du cas :
casser;
défaut:
casser;
}
renvoie null ;
}
/**
* En analysant récursivement la chaîne Json, obtenez le nom de la chaîne Json par l'expression régulière,
* voir aussi Matcher et Pattern et analyse des données Si l'objet JsonObject de données analytiques renvoie une paire clé-valeur (Map),
* si JsonArray List est renvoyé, sinon il renvoie String.
* <br><b>Remarque :</b> si vous retournez Map, vous feriez mieux d'invoquer map.get(null) pour obtenir la valeur.
* @voir {@link java.util.regex.Matcher}, {@link java.util.regex.Pattern}
* @param jsonStr
* @return {@link java.util.Map} ou {@link java.util.List} ou {@link java.lang.String}
*/
Objet statique privé regexJson (chaîne finale jsonStr) {
if (jsonStr == null) throw new NullPointerException("JsonString ne devrait pas être nul");
essayer {
si (isJsonObject(jsonStr)) {
motif final = Pattern.compile(REGULAR_JSON_ITEM_NAME);
matcher final matcher = pattern.matcher(jsonStr);
final Map<String, Object> map = new HashMap<String, Object>();
JSONObject final jsonObject = new JSONObject(jsonStr);
pour ( ; matcher.find(); ) {
Chaîne groupName = matcher.group(1);
Objet obj = jsonObject.opt(groupName);
si (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()));
}
carte de retour ;
} sinon if (isJsonArray(jsonStr)) {
List<Object> list = new ArrayList<Object>();
JSONArray jsonArray = nouveau JSONArray(jsonStr);
pour (int i = 0; i < jsonArray.length(); i++) {
Objet objet = jsonArray.opt(i);
list.add(regexJson(object.toString()));
}
liste de retour ;
}
} attraper (Exception e) {
// TODO : gérer l'exception
Log.e("RegexUtil--regexJson", e.getMessage()+"");
}
retourner jsonStr ;
}
/**
* Pour déterminer si une chaîne est JsonObject {@link org.json.JSONObject}
* @param jsonStr {@link java.lang.String}
* @return booléen
*/
booléen statique privé isJsonObject (string final jsonStr) {
if (jsonStr == null) renvoie false ;
essayer {
nouveau JSONObject(jsonStr);
renvoie vrai ;
} catch (JSONException e) {
// TODO Bloc catch généré automatiquement
e.printStackTrace();
renvoie faux ;
}
}
/**
* Pour déterminer si une chaîne est JsonArray {@link org.json.JSONArray} ;
* @param jsonStr {@link java.lang.String}
* @return booléen
*/
booléen statique privé isJsonArray (string final jsonStr) {
if (jsonStr == null) renvoie false ;
essayer {
nouveau JSONArray(jsonStr);
renvoie vrai ;
} catch (JSONException e) {
// TODO Bloc catch généré automatiquement
e.printStackTrace();
renvoie faux ;
}
}
}
//Comment utiliser
Objet objet = RegexUtil.regex(RegexPolicy.Json, jsonStr.substring(jsonStr.indexOf("{"),
jsonStr.lastIndexOf("}")+1));
if (instance d'objet de String) {
Log.e("string", object.toString());
} else if (instance d'objet de Map) {
@SuppressWarnings("non coché")
HashMap<String, Object> map = (HashMap<String, Object>)object;
Iterator<Entry<String, Object>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Entry<String, Object> Entry = iterator.next();
if (entry.getValue() instanceof List) {
Log.e(entry.getKey(), Entry.getValue().toString());
} autre {
Log.e(entry.getKey(), Entry.getValue().toString());
}
}
} else if (instance d'objet de List) {
Log.e("liste", object.toString());
}