2 votes

Conversion des chaînes en cartes java

Código:

 Map test = new HashMap<String,String>();
 test.put("1", "erica");
 test.put("2", "frog");
 System.out.println(test.toString());

Ce code donne comme résultat :

 {1=erica, 2=frog}

Je veux que cette sortie soit à nouveau placée dans une carte en tant que paire clé-valeur. Comment puis-je mettre cela en œuvre ? Ou existe-t-il une classe utilitaire prédéfinie pour la conversion de la sortie vers le format HashMap encore ?

1voto

Nicolas Filotto Points 32004

Pour moi, la bonne façon de procéder serait d'utiliser une JSON un analyseur syntaxique comme Jackson puisque la manière dont un HashMap est sérialisée n'est pas destinée à être analysée après, de sorte que si vous utilisez des caractères spécifiques comme = o , ils ne seront pas échappés, ce qui les rendra inexécutables.

Comment sérialiser un Map con Jackson ?

ObjectMapper mapper = new ObjectMapper();
String result = mapper.writeValueAsString(myMap);

Comment désérialiser un String pour obtenir un Map con Jackson ?

ObjectMapper mapper = new ObjectMapper();
Map map = mapper.readValue(contentToParse, Map.class);

0voto

Rahul Tripathi Points 1

Vous pouvez essayer de l'utiliser :

String[] tk = mystring.split(" |=");
Map<String, String> map = new HashMap<>();
for (int i=0; i < tk.length-1; i++)
{ 
  map.put(tk[i], tk[i]);
}
return map;

0voto

Beethoven Points 340

Si vous voulez reproduire le code Java remplissant la carte, vous pouvez utiliser quelque chose comme ceci :

StringBuilder sb = new StringBuilder("Map<String, String> test = new HashMap<>();");
for(Map.Entry<?, ?> entry : test.entrySet())
{
    sb.append("\ntest.put(\"");
    sb.append(entry.getKey());
    sb.append("\", \"");
    sb.append(entry.getValue());
    sb.append("\");");
}
String string = sb.toString();
System.out.println(string);

Mais je suis d'accord avec les commentaires, que dans de nombreuses applications un format tel que JSON est plus approprié pour sérialiser une carte.

Notez que la solution ci-dessus n'échappe pas les chaînes de caractères, elle ne fonctionne que si les chaînes de caractères ne contiennent pas de caractères comme " ou \n. Si vous devez traiter ces cas, cela deviendra plus compliqué.

0voto

MichaelP Points 11

Vous pouvez essayer ce qui suit :

String out = test.toString();
Map<String, String> newMap = new HashMap();
// remove the first and last "{", "}"
out = out.subString(1,out.size()-1)
String[] newOut = out.split(", ");
for (int i=0; i<newOut.length;i++){
    // keyValue is size of 2. cell 0 is key, cell 1 is value
    String[] keyValue = newOut.split("=");
    newMap.put(keyValue[0], keyValue[1]);
}

Je n'ai pas testé le code en java que j'ai juste écrit de mon esprit. J'espère qu'il fonctionnera

Prograide.com

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.

Powered by:

X