2016-11-01 2 views
1

私はこれに対する明確な答えを見つけることができません。 ECLIPSE IDEはemojisをサポートしていますか?私はスタックオーバーフローでここでサロゲートペアについて多くを読んだが、私はこれについて明確な答えを得ることができません。サロゲートペアを使用したEclipse IDE処理emojis

テキストファイルを文字単位で読み込む必要があり、FileInputStreamを使用しています。

サロゲートペアを使用して絵文字を処理することは可能でしょうか?私は選択されたいくつかのリンゴのemojisを使用したいです。具体的には次のとおりです。 これを処理することで、ファイルを読むときにその特定の絵文字として識別したいと思います。

もしそうなら、誰かが私に例を示すことができますか?

+0

短い答え:はい、それが可能です。 「エモジスを処理する」とはどういう意味ですか?あなたは彼らと何をしたいですか? – VGR

+0

これを処理することで、私はそれらを個別に識別し、それを元にした絵を元に戻すことができるようにしたいと考えています。 – Wanda

答えて

1

入力ストリームはバイトを読み取るためのものです。 Readersは文字を読むためのものです。したがって、Files.newBufferedReaderから取得したReaderを使用するか、FileReaderまたはInputStreamReaderを使用する必要があります。

Javaでは、emojisや他の多くのタイプのUnicode文字を表す文字列内のサロゲートペアを使用しますが、サロゲートペアを直接処理する必要はありません。サロゲート値は、Javaのcharタイプでは多くの文字値が大きすぎるためにのみ存在します。 intの値(たとえば、CharSequence.codePointsメソッド)を個々の文字として読み取ると、文字の値が毎回取得されるため、サロゲート値が表示されることはありません。

この執筆時点では、emojisは、Emoticonsブロック、Supplemental Symbols and Pictographsブロックの一部、およびMiscellaneous Symbolsブロックの3つのレガシー文字になるようにUnicodeで定義されています。

したがって、BufferedReaderのを使ってint型に文字データを横断すると、このようになります。

try (BufferedReader reader = 
    Files.newBufferedReader(Paths.get(filename), Charset.defaultCharset())) { 

    IntStream chars = reader.lines().flatMapToInt(String::codePoints); 
    chars.forEachOrdered(c -> { 
     if ((c >= 0x2639 && c <= 0x263b) || 
      (c >= 0x1f600 && c < 0x1f650) || 
      (c >= 0x1f910 && c < 0x1f930)) { 

      processEmoji(c); 
     } 
    }); 
} 
+0

ありがとう、これは多くの助けとなりました。あなたの詳細な対応に感謝します。私は正しいファイルリーダーを使用していないと感じました。 – Wanda

関連する問題