如何在Java字符串中插入表情符号?

10

我正在尝试编写一个可以打印出表情符号的程序。然而,在SDK中,我无法插入表情符号,\u 不足以使用表情符号所需的字符数。有没有简单的方法可以解决这个问题?

所有在线解决方案似乎都涉及到 StringBuffer。是否有不使用 StringBuffer 的方法?如果没有,我该如何使用它?


这不是一个重复的问题,因为原帖要求在没有StringBuffer的情况下提供解决方案。 - Sweeper
like this ____ : ) - Emil Hotkowski
5
什么表情符号?如果你指的是例如'GRINNING FACE' (U+1F600),那么如果你的源代码是UTF-8,就写"",如果不是,则写"\uD83D\uDE00" - Andreas
2个回答

14
如果您想要使用 SNS 发送服务器端通知,则可以使用以下方法。
String context = "You can eat water too! ";
        context += new String(Character.toChars(0x1F349));

各种表情符号的Unicode编码


6

可以使用Unicode代理对来完成,而不需要使用StringBuilder

代理字符通常称为代理对。它们是由两个包含单个代码点的字符组合而成的。为了便于检测代理对,Unicode标准保留了U+D800到U+DFFF范围供UTF-16使用。在此范围内没有为代码点分配任何字符。当程序看到落在此范围内的一系列位时,它们立即就会知道遇到了代理对。

这个保留范围由两部分组成:

  • 高代理项 — U+D800到U+DBFF(共1,024个代码点)
  • 低代理项 — U+DC00到U+DFFF(共1,024个代码点)

以下内容将打印外星人表情符号 ():

int[] surrogates = {0xD83D, 0xDC7D};
String alienEmojiString = new String(surrogates, 0, surrogates.length);
System.out.println(alienEmojiString);
System.out.println("\uD83D\uDC7D");   // alternative way

9
如果回答包含UTF-16的快速解释,为什么Java字符串需要它,以及为什么表情符号被表示为\uD83D\uDC7D,那么我认为这将是一个更好的答案。 - VGR
1
这是一个在线编码器/解码器,可以在给定表情符号时生成代理对,反之亦然:http://russellcottrell.com/greek/utilities/SurrogatePairCalculator.htm - Archie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接