替换字符串中的所有表情符号

时间:2016-04-22 20:18:33

标签: java string emoji

我正在开发一个简单的java程序,可以使用这样的字符串:

  

⛔️✋STOP✋⛔️你违反了法律!但是现在......你

并用适当的java字符替换每个表情符号。 (我不确定该怎么称呼它们。)

以下是一个例子:

汽车表情符号:将替换为:"\\uD83D\\uDE97"

这允许我有一个字符串,如

"I am a car: \uD83D\uDE97"

在Java源代码中,让它看起来像这样:

enter image description here

我可以通过这样做轻松地为一种表情符号做这个:

emojistring = emojistring.replace("", "\uD83D\uDE97");

问题是我将翻译字符串,比如我的示例字符串,它将包含许多不同类型的表情符号。  我不想为我的字符串中的每一种表情符号写一个emojistring.replace("Emoji","Java Character")

是否有自动方法检测字符串中的表情符号并将其替换为相关的java代码?

2 个答案:

答案 0 :(得分:4)

查看emoji-java,更具体地说是EmojiParser类。

您可以将字符串解析为别名(文本表示),HTML十进制或HTML十六进制。你也可以删除表情符号。

示例:

String str = "An awesome string with a few emojis!";
String result = EmojiParser.parseToAliases(str);
System.out.println(result);
// Prints:
// "An :grinning:awesome :smiley:string with a few :wink:emojis!"

免责声明:我写了这个库

答案 1 :(得分:0)

显示的字符占位符是Unicode"字符" /代码点U + 01F697。由于Java将Unicode编码为UTF-16字符,因此对于如此高编号的代码点,需要一对字符。

你也可以做到:

int[] codepoints = { 0x1F697 };
String s = new String(codepoints, 0, codepoints.length);

实际上解决了nothi0x1F697ng。实际问题是字体无法表示表情符号,并且还原为此类字符串。

Java可以对样式化文本做很多事情,例如java Swing GUI中的HTML。然后你可以用图像替换表情符号字符。或者您可以使用字体编辑器,并使用registerFont。

您可以以编程方式检查字体:

Font font = ...
if (!font.canDisplay(0x1F697)) {
    ...
}