Java文字列から絵文字を削除する

1。概要

最近、絵文字はテキストメッセージングで人気が高まっています。絵文字やその他の記号から、テキストを削除する必要がある場合があります。

このチュートリアルでは、Javaで文字列から絵文字を削除するさまざまな方法について説明します。

2.絵文字ライブラリの使用

まず、絵文字ライブラリを使用して、文字列から絵文字を削除します。

次の例ではemoji-javaを使用するため、pom.xmlへの依存関係を確認する必要があります。

 com.vdurmont emoji-java 4.0.0 

最新バージョンはここにあります。

次に、emoji-javaを使用して文字列から絵文字を削除する方法を見てみましょう。

@Test public void whenRemoveEmojiUsingLibrary_thenSuccess() { String text = "la conférence, commencera à 10 heures ?"; String result = EmojiParser.removeAllEmojis(text); assertEquals(result, "la conférence, commencera à 10 heures "); }

ここでは、我々はしている呼び出しremoveAllEmojis()のメソッドEmojiParserを

EmojiParserを使用して、parseToAliases()メソッドを使用して絵文字をそのエイリアスに置き換えることもできます。

@Test public void whenReplaceEmojiUsingLibrary_thenSuccess() { String text = "la conférence, commencera à 10 heures ?"; String result = EmojiParser.parseToAliases(text); assertEquals( result, "la conférence, commencera à 10 heures :sweat_smile:"); }

このライブラリを使用すると、絵文字をエイリアスに置き換える必要がある場合に非常に便利です。

ただし、emoji-javaライブラリは絵文字のみを検出し、記号やその他の特殊文字は検出できません。

3.正規表現の使用

次に、正規表現を使用して絵文字やその他の記号を削除できます。

特定の種類の文字のみを許可します。

@Test public void whenRemoveEmojiUsingMatcher_thenSuccess() { String text = "la conférence, commencera à 10 heures ?"; String regex = "[^\\p{L}\\p{N}\\p{P}\\p{Z}]"; Pattern pattern = Pattern.compile( regex, Pattern.UNICODE_CHARACTER_CLASS); Matcher matcher = pattern.matcher(text); String result = matcher.replaceAll(""); assertEquals(result, "la conférence, commencera à 10 heures "); }

正規表現を分解してみましょう。

  • \ p {L} –任意の言語のすべての文字を許可する
  • \ p {N} –数値の場合
  • \ p {P} –句読点用
  • \ p {Z} –空白区切り文字の場合
  • ^は否定用であるため、これらの式はすべてホワイトリストに登録されます

この式は、文字、数字、句読点、および空白のみを保持します。より多くの文字タイプを許可または削除したいので、式をカスタマイズできます

同じ正規表現でString.replaceAll()を使用することもできます。

@Test public void whenRemoveEmojiUsingRegex_thenSuccess() { String text = "la conférence, commencera à 10 heures ?"; String regex = "[^\\p{L}\\p{N}\\p{P}\\p{Z}]"; String result = text.replaceAll(regex, ""); assertEquals(result, "la conférence, commencera à 10 heures "); }

5.コードポイントの使用

次に、コードポイントを使用して絵文字も検出します。\ x {hexidecimal value}式を使用して、特定のUnicodeポイントに一致させることができます。

次の例では、Unicodeポイントを使用して2つのUnicode範囲の絵文字を削除します。

@Test public void whenRemoveEmojiUsingCodepoints_thenSuccess() { String text = "la conférence, commencera à 10 heures ?"; String result = text.replaceAll("[\\x{0001f300}-\\x{0001f64f}]|[\\x{0001f680}-\\x{0001f6ff}]", ""); assertEquals(result, "la conférence, commencera à 10 heures "); }

現在利用可能な絵文字とそのコードポイントの完全なリストは、ここにあります。

6.Unicode範囲の使用

最後に、Unicodeを再度使用しますが、今回は\ u式を使用します。

問題は、一部のUnicodeポイントが1つの16ビットJava文字に収まらないため、一部のUnicodeポイントには2文字が必要なことです。

\ uを使用した対応する式は次のとおりです。

@Test public void whenRemoveEmojiUsingUnicode_thenSuccess()  String text = "la conférence, commencera à 10 heures ?"; String result = text.replaceAll("[\ud83c\udf00-\ud83d\ude4f]

7.結論

この簡単な記事では、Java文字列から絵文字を削除するさまざまな方法を学びました。絵文字ライブラリ、正規表現、Unicode範囲を使用しました。

例の完全なソースコードはGitHubにあります。