2016-05-02 9 views
0

を使用してキー値を分割する必要がありますが、値がXMLであるという問題があります。Java SPLIT with colon:and xml

("User1":"<?xml version=\"1.0\"?><presence xmlns=\"urn:ietf:params:xml:ns:pidf\" xmlns:dm=\"urn:ietf:params:xml:ns:pidf:data-model\" xmlns:rpid=\"urn:ietf:params:xml:ns:pidf:rpid\" xmlns:c=\"urn:ietf:params:xml:ns:pidf:cipid\" entity=\"[email protected]\"></presence>") 

私が望むのは、キーがUser1、値がXMLのマップです。

私はinput.split(":");を試しましたが、これはxml名前空間のすべてを分割するので機能しません。私はinput.split("\\\":\"");を試しましたが、これは何もしません。

多分正規表現が役立つかもしれませんが、私は正確に何ができるのか分かりません。

+1

2回しか分割しないこのようなものはありますか? http://stackoverflow.com/questions/32349245/split-a-string-only-two-times – Tunaki

答えて

1

あなたの鍵は、コロンが含まれていない場合は、次のことを試すことができます。

public static void main(String[] args) { 
    final String str = "\"User1\":\"<?xml version=\"1.0\"?><presence xmlns=\"urn:ietf:params:xml:ns:pidf\" xmlns:dm=\"urn:ietf:params:xml:ns:pidf:data-model\" xmlns:rpid=\"urn:ietf:params:xml:ns:pidf:rpid\" xmlns:c=\"urn:ietf:params:xml:ns:pidf:cipid\" entity=\"[email protected]\"></presence>"; 
    final int firstIndexOfColon = str.indexOf(':'); 
    if(firstIndexOfColon >= 0) { 
     final String key = str.substring(0, firstIndexOfColon); 
     final String val = ((firstIndexOfColon + 1) < str.length()) ? str.substring(1 + firstIndexOfColon) : "Empty value string"; 
     System.out.println(key); 
     System.out.println(val); 
    } else { 
     System.out.println("No delimiter found"); 
    } 
} 

そうでない場合、あなたはより正確な構文を指定する必要がありますので、正規表現を調製することができます。

+0

驚くばかりです。簡単な解決策。 – Jardanian