Je reçois la réponse suivante d'un serveur sous forme de chaîne...
valeur_un=3342342&valeur_deux=456344445&valeur_trois=235333223
Quelle serait une façon efficace de la parser ? Tout ce à quoi je peux penser est assez désordonné.
Je reçois la réponse suivante d'un serveur sous forme de chaîne...
valeur_un=3342342&valeur_deux=456344445&valeur_trois=235333223
Quelle serait une façon efficace de la parser ? Tout ce à quoi je peux penser est assez désordonné.
Si vous prévoyez d'analyser plusieurs chaînes, alors utiliser à plusieurs reprises la méthode String.split()
n'est pas une bonne idée, car cela recompilerait l'expression régulière à chaque fois.
Pattern ampPattern = Pattern.compile("&");
Pattern eqPattern = Pattern.compile("=");
...
Map results = new HashMap();
for (String param : ampPattern.split(input)) {
String[] pair = eqPattern.split(param);
results.put(pair[0], Long.valueOf(pair[1]));
}
Cependant, pour une chaîne d'entrée aussi simple, il serait encore plus efficace de ne pas utiliser du tout d'expressions régulières et d'éviter la création de tableaux de chaînes temporaires. Peut-être quelque chose comme ceci :
Map results = new HashMap();
int start = 0;
int next;
do {
next = input.indexOf('&', start);
int end = next == -1 ? input.length() : next;
int k = input.indexOf('=', start);
results.put(input.substring(start, k), Long.valueOf(input.substring(k + 1, end)));
start = next + 1;
} while (next > -1);
Bien sûr, si vous ne parsez cette chaîne que quelques fois, une telle optimisation peut ne pas en valoir la peine.
Une approche naïve est d'utiliser simplement String.split:
String input = "value_one=3342342&value_two=456344445&value_three=235333223"
String[] rawAttrs = input.split("&");
// Diviser chaque attribut en paires - supposez qu'une sorte de classe Pair existe
List> attributes = new ArrayList>();
for (String rawAttr : rawAttrs) {
String[] parts = rawAttrs.split("=");
attributes.add(new Pair(parts[0], parts[1]);
}
Cette approche ne gère pas bien les entrées mal formées - mais plus important encore, elle ne tient pas compte de ce qui se passe si une partie des valeurs des attributs inclut un caractère =
ou &
. Sont-ils échappés par un antislash? Sont-ils encodés en URL? Existe-t-il une autre façon dont ils pourraient être intégrés?
Si vous pouvez garantir que les valeurs sont des entiers, alors cela ne posera pas de problème, mais vous devez vous assurer que toutes les bases sont couvertes.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.