android怎样过滤字符串中的emoji表情

2024-11-02 06:26:39
推荐回答(2个)
回答1:

 对于字符串处理,首选就是正则表达式去处理,而在android系统中可以自定义InputFilter去过滤需要处理掉的字符串,代码如下

  InputFilter emojiFilter = new InputFilter ( ) {

  @Override
  public CharSequence filter ( CharSequence source , int start , int end , Spanned dest , int dstart ,

  int dend ) {

  }
  } ;
  随后我查阅了 emoji 的wikipedia与 Github ,从中提取出表情的一个大概unicode范围,由于Java可以直接对unicode进行匹配,这样我们可以很省事直接写出Pattern即可,代码如下

  InputFilter emojiFilter = new InputFilter ( ) {

  Pattern emoji = Pattern . compile (

  "[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]" ,

  Pattern . UNICODE_CASE | Pattern . CASE_INSENSITIVE ) ;

  @Override
  public CharSequence filter ( CharSequence source , int start , int end , Spanned dest , int dstart ,

  int dend ) {

  Matcher emojiMatcher = emoji . matcher ( source ) ;

  if ( emojiMatcher . find ( ) ) {

  return "" ;

  }
  return null ;

  }
  } ;
  基本上这样就能过滤掉emoji表情了

回答2:

  解决方案

  对于字符串处理,首选就是正则表达式去处理,而在android系统中可以自定义InputFilter去过滤需要处理掉的字符串,代码如下

  InputFilter emojiFilter = new InputFilter ( ) {

  @Override
  public CharSequence filter ( CharSequence source , int start , int end , Spanned dest , int dstart ,

  int dend ) {

  }
  } ;
  随后我查阅了 emoji 的wikipedia与 Github ,从中提取出表情的一个大概unicode范围,由于Java可以直接对unicode进行匹配,这样我们可以很省事直接写出Pattern即可,代码如下

  InputFilter emojiFilter = new InputFilter ( ) {

  Pattern emoji = Pattern . compile (

  "[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]" ,

  Pattern . UNICODE_CASE | Pattern . CASE_INSENSITIVE ) ;

  @Override
  public CharSequence filter ( CharSequence source , int start , int end , Spanned dest , int dstart ,

  int dend ) {

  Matcher emojiMatcher = emoji . matcher ( source ) ;

  if ( emojiMatcher . find ( ) ) {

  return "" ;

  }
  return null ;

  }
  } ;
  基本上这样就能过滤掉emoji表情了