2016-05-23 9 views
0

I unten String haben, die im Format von key1=value1, key2=value2 ist, das ich es in einer Karte laden müssen (Map<String, String>) als key=value so muss ich , auf Komma aufgeteilt und dann cossn als Schlüssel zu laden und 0 seinen Wert.Parsen Sie eine Zeichenfolge mit Schlüssel = Wert-Paar in einer Karte?

String payload = "cossn=0, itwrqm=200006033213"; 
Map<String, String> holder = 
      Splitter.on(",").trimResults().withKeyValueSeparator("=").split(payload); 

Ich verwende Splitter hier, um die Arbeit für mich zu erledigen, aber für einige Fälle ist es fehlgeschlagen. Für einige meiner Strings enthält value eine Zeichenfolge mit gleichem Vorzeichen. Also für unten Zeichenfolge war es für mich fehlgeschlagen:

String payload = "cossn=0, abc=hello/=world"; 

Wie kann ich es für den obigen Fall arbeiten lassen? Für den obigen Fall key wird abc und Wert sollte hello/=world sein. Ist das möglich?

+0

wie können Sie machen was genau funktioniert? Splitter? Java? Es gibt eine Reihe von verschiedenen Möglichkeiten, dies zu tun, aber vielleicht keine einzige Zeile Funktionszeichenfolgen. – Tibrogargan

+0

Hinzufügen von 2 zum Split-Anruf sollte funktionieren. –

+0

Nach dem Hinzufügen von 2 zum Split, sehe ich diesen Fehler 'Die Methode Split (CharSequence) im Typ Splitter.MapSplitter ist nicht anwendbar für die Argumente (String, int)'. – user1950349

Antwort

2

Sie eine Nummer hinzufügen können, zu sagen, wie viele Teilungen Sie nur 2 aufzuspalten

import java.util.HashMap; 

public class HelloWorld{ 

    public static void main(String []args){ 
     HashMap<String, String> holder = new HashMap(); 
     String payload = "cossn=0, abc=hello/=world"; 
     String[] keyVals = payload.split(", "); 
     for(String keyVal:keyVals) 
     { 
      String[] parts = keyVal.split("=",2); 
      holder.put(parts[0],parts[1]); 
     } 

    } 
} 
+0

Dies ist der Fehler, den ich sehe 'Die Methode split (CharSequence) im Typ Splitter.MapSplitter ist nicht anwendbar für die Argumente (String, int)'. – user1950349

+0

haben Sie in Betracht gezogen, stattdessen eine Schleife zu verwenden? –

+0

Können Sie ein Beispiel geben, wie kann ich das tun? – user1950349

3

Sie können diese gleiche tun mit der Splitter API direkt hinzufügen wollen:

Map<String, String> result = Splitter.on(',') 
    .trimResults() 
    .withKeyValueSeparator(
     Splitter.on('=') 
      .limit(2) 
      .trimResults()) 
    .split(input);