2014-12-05 86 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