【问题标题】:Replace all emojis in string替换字符串中的所有表情符号
【发布时间】:2016-08-16 14:32:08
【问题描述】:

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

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

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

这是一个例子:

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

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

"I am a car: \uD83D\uDE97"

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

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

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

问题是我将翻译字符串,就像我的示例字符串一样,它会有很多不同类型的表情符号。 我不想为字符串中的每一种表情符号都写一个emojistring.replace("Emoji","Java Character")

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

【问题讨论】:

  • 我认为这里有些混乱。 Java 已经将补充字符存储为 UTF-16 代理对。写"????" 与写"\uD83D\uDE97"完全相同。你的 emojistring.replace 调用什么都不做。
  • @VGR 哎呀,修复了。
  • @f_puras 这不是重复的。如果您转到每个帖子的底部,所提出的问题会有所不同。

标签: java string emoji


【解决方案1】:

显示的字符占位符 ? 是 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)) {
    ...
}

【讨论】:

    【解决方案2】:

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

    免责声明:我编写了这个库

    【讨论】:

    • 是不是意味着它可以将表情符号转换成\uD83D\uDE97这种格式?
    猜你喜欢
    • 2019-04-22
    • 1970-01-01
    • 2015-05-19
    • 2020-05-12
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    相关资源
    最近更新 更多