繁体   English   中英

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

[英]Replace all emojis in string

我正在一个简单的Java程序上工作,该程序可以采用这样的字符串:

⛔️🚫✋STOP✋🚫⛔️🚫您违反了law法律!🚫😖😖但是现在...😏😖😈您

并将每个表情符号替换为适当的Java字符。 (我不确定该怎么称呼他们)。

这是一个例子:

汽车表情符号:🚗将替换为: "\\\?\\\?"

这使我可以使用诸如

"I am a car: \?\?"

Java源代码中,并使其如下所示:

在此处输入图片说明

通过执行以下操作,我可以轻松地针对一种表情符号执行此操作:

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

问题是我将翻译字符串,例如示例字符串,该字符串将包含许多不同类型的emojjis。 我不想为emojistring.replace("Emoji","Java Character")都编写emojistring.replace("Emoji","Java Character")

有没有一种自动的方法来检测字符串中的表情符号并将其替换为相关的Java代码?

看一下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!"

免责声明:我写了这个库

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

您也可以这样做:

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

实际上解决了nothi0x1F697ng。 实际的问题是字体不能代表表情符号,而是还原为此类box char。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM