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

1概要

絵文字は、最近のテキストメッセージングでより一般的になっています - 時々私たちはそれらや他のシンボルからテキストをきれいにする必要があります。

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

2絵文字ライブラリの使い方

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

次の例では emoji-java を使用しますので、この pom.xml への依存関係が必要です。

<dependency>
    <groupId>com.vdurmont</groupId>
    <artifactId>emoji-java</artifactId>
    <version>4.0.0</version>
</dependency>

最新版はhttps://search.maven.org/search?q=emoji-java[here]にあります。

それでは、 __ emoji-java を使って、 String__から絵文字を削除する方法を見てみましょう。

@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 ");
}

ここでは、 EmojiParser ** .の removeAllEmojis() メソッドを呼び出しています。

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

@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をそれらの別名に置き換える必要がある場合、このライブラリを使用することは非常に便利です。

ただし、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コードポイントの使い方

今、私たちは彼らのコードポイントを使って絵文字も検出します。 ** 特定のUnicodeポイントに一致させるために \ x \ {16進値} 式を使用できます。

次の例では、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 ");
}

現在利用可能な絵文字とそのコードポイントの全リストはhttps://unicode.org/emoji/charts/full-emoji-list.html[ここ]にあります。

6. Unicodeの範囲を使う

最後に、もう一度Unicodeを使いますが、今回は \ u 式を使います。

問題は、Unicodeのポイントの中には16ビットのJavaの1文字に収まらないものがあるため、2文字が必要なものもあります。

これは \ u を使った対応する式です。

@Test
public void whenRemoveEmojiUsingUnicode__thenSuccess() {
    String text = "la conférence, commencera à 10 heures 😅";
    String result = text.replaceAll("[\ud83c\udf00-\ud83d\ude4f]|[\ud83d\ude80-\ud83d\udeff]", "");

    assertEquals(result, "la conférence, commencera à 10 heures ");
}

7. 結論

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

例の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/java-strings[over on GitHub]にあります。