使用Java替换阿拉伯语推文中的Emoji Unicode范围 [英] Replacing Emoji Unicode Range from Arabic Tweets using Java

查看:54
本文介绍了使用Java替换阿拉伯语推文中的Emoji Unicode范围的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Java替换阿拉伯语推文中的emoji。

我使用了以下代码:

String line = "اييه تقولي اجل الارسنال تعادل امس بعد ما كان فايز 😂😂";
Pattern unicodeOutliers = Pattern.compile("([u1F601-u1F64F])", Pattern.UNICODE_CASE | Pattern.CANON_EQ | Pattern.CASE_INSENSITIVE);
Matcher unicodeOutlierMatcher = unicodeOutliers.matcher(line);
line = unicodeOutlierMatcher.replaceAll(" $1 ");

但它不会取代它们。即使我只匹配字符本身"u1F602",它也不会替换它。可能是因为它是u后面的5位数字?!我不确定,只是猜测。

请注意:

1-推文末尾的感动(😂)为"U+1F602",即"joy泪流满面"

2-此问题不是this question的重复问题。

有什么想法吗?

推荐答案

Java 5和6

如果您在Java 5或6 JVM上运行程序,并且希望匹配U+1F601到U+1F64F范围内的字符,请在Character类中使用代理项对:

Pattern emoticons = Pattern.compile("[uD83DuDE01-uD83DuDE4F]");

此方法即使在Java 7及更高版本中也有效,因为在Sun/Oracle的实现中,如果反编译Pattern.compile()方法,则包含模式的字符串在编译前被转换为代码点数组。

Java 7及更高版本

  1. 您可以在David Wallace的答案中使用x{...}结构,该结构可从Java 7获得。

  2. 或者,您也可以指定从代码点U+1F600(而不是U+1F601)到U+1F64F的整个Emoticons Unicode block

    Pattern emoticons = Pattern.compile("\p{InEmoticons}");
    

    由于Java 7中添加了Emoticons block支持,因此此方法也仅在Java 7中有效。

  3. 虽然其他方法也是首选方法,但您可以通过在正则表达式中指定转义来指定补充字符。虽然在源代码中没有理由这样做,但Java 7中的这一更改更正了使用正则表达式进行搜索的应用程序中的行为,并且不能直接粘贴字符。

    Pattern emoticons = Pattern.compile("[\uD83D\uDE01-\uD83D\uDE4F]");
    

    /!警告

    永远不要在指定补充代码点时将语法混合在一起,如:

    • "[\uD83DuDE01-\uD83D\uDE4F]"

    • "[uD83D\uDE01-\uD83D\uDE4F]"

      /li>

    它们将指定匹配Oracle实现中的代码点U+D83D和从代码点U+DE01到代码点U+1F64F的范围。

注意:

在Oracle的实现Java 5和6中,Pattern.u()的实现不会折叠有效的正则表达式转义代理对"\uD83D\uDE01"。因此,该模式被解释为两个单独的代理,它们将无法匹配任何内容。

这篇关于使用Java替换阿拉伯语推文中的Emoji Unicode范围的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆