2014-12-05 152 views
2

我收到了來自排隊服務的消息,我認爲這是一個UTF-8編碼的字符串。它原來是一個字符串中引用和轉義的字符串。也就是說,字符串本身的第一個字符和最後一個字符是",每個換行符是兩個字符\n,引號(因爲這是XML很多)是\",而外語中的單個UTF-8字符表示爲六個字符,\uABCD)。我知道我可以通過滾動我自己的方式解開所有這些,但我認爲必須有可以做到這一點的方法組合。這個咒語可能是什麼?在字符串中展開字符串

+0

[HOWTO UNESCAPE一個Java字符串字面量在Java中(可能重複http://stackoverflow.com/問題/ 3537706/howto-unescape-a-java-string-literal-in-java) – njzk2 2014-12-05 16:16:19

+1

它實際上只是JSON嗎?如果是這樣,請使用JSON解析器。 – 2014-12-05 16:16:25

+0

@JonSkeet這不是JSON。絕對XML內容,逃脫。 – gknauth 2014-12-05 16:18:55

回答

0

從@JonSkeet和@ njzk2反饋後,我想出了這個,它的工作:

// gradle: 'org.apache.commons:commons-lang3:3.3.2' 
import org.apache.commons.lang3.StringEscapeUtils; 

String s = serviceThatSometimesReturnsQuotedStringWithinString(); 
String usable = null; 
if (s.length() > 0 && s.charAt(0) == '"' && s.charAt(s.length()-1) == '"') { 
    usable = StringEscapeUtils.unescapeEcmaScript(s.substring(1, s.length()-1)); 
} else { 
    usable = s; 
} 
+0

我也應該讚揚這篇文章:http://stackoverflow.com/questions/9359660/json-replace-quotes-and-slashes-but-by-what – gknauth 2014-12-05 17:00:45