StringEscapeUtils:如何取消除表情符号之外的字符串?

时间:2017-04-07 21:01:28

标签: java apache-commons-lang3

我正在使用StringEscapeUtils#escapeJava来转义字符串。字符:“é”(LATIN SMALL LETTER E WITH ACUTE)转换为“\ u00E9”和“?”(SMILING FACE WITH OPEN MOUTH AND COLD SWEAT)转换为“\ uD83D \ uDE05”。现在,如果我想要取消它们,它们将恢复原来的形式。但是我想把“\ u00E9”改为“é”并保持“\ uD83D \ uDE05”不变。我应该怎么做才能让emojis逃脱,但字母表是?

1 个答案:

答案 0 :(得分:1)

可能更容易"完全unescape"字符串,然后只重新表达表情符号。您可以使用Character.isLowSurrogateCharacter.isHighSurrogate检测代理字符对,从而做到这一点。

例如:

StringBuilder sb = new StringBuilder(str.length());
for (int i = 0; i < str.length(); ++i) {
  char c = str.charAt(i);
  if (Character.isHighSurrogate(c) || Character.isLowSurrogate(c)) {
    // Append the escaped character.
    sb.append("\\u");
    sb.append(String.format("%04x", (int) c));
  } else {
    // Append the character as-is.
    sb.append(c);
  }
}
String partlyEscaped = sb.toString();

Ideone demo