2016-11-01 7 views
1

Ich bin nicht in der Lage, eine klare Antwort zu diesem zu finden. Unterstützt die ECLIPSE IDE Emojis? Ich habe hier auf Stack Overflow viel über Surrogat-Paare gelesen, aber darauf kann ich keine klare Antwort bekommen.Eclipse IDE Verarbeitung Emojis mit Ersatz Paaren

Ich muss eine Textdatei Zeichen für Zeichen einlesen und ich verwende FileInputStream.

Wäre es möglich, die Emojis mit Ersatzpaaren zu verarbeiten? Ich möchte ein paar ausgewählte Apfel-Emojis verwenden. Diese speziell: Durch sie verarbeiten, ich meine, ich möchte sie als das bestimmte Emoji beim Einlesen der Datei identifizieren.

Wenn ja, könnte mir jemand ein Beispiel zeigen?

+0

Kurze Antwort: Ja, es ist möglich. Was bedeutet "Emojis verarbeiten"? Was willst du mit ihnen machen? – VGR

+0

Indem ich sie verarbeite, meine ich, dass ich sie gerne einzeln identifizieren und etwas zurückgeben könnte, basierend darauf, welches Emoji es ist. – Wanda

Antwort

1

InputStreams dienen zum Lesen von Bytes; Readers sind zum Lesen von Zeichen. Sie sollten also einen Reader verwenden, der von Files.newBufferedReader erhalten wurde, oder einen FileReader oder InputStreamReader verwenden.

Obwohl Java in einem String Ersatzzeichenpaare verwendet, um Emojis und viele andere Unicode-Zeichen darzustellen, müssen Sie sich nicht direkt mit Ersatzpaaren beschäftigen. Ersatzwerte existieren nur, weil viele Zeichenwerte für einen Java-Typ zu groß sind. Wenn Sie einzelne Zeichen als int Werte lesen (z. B. mit der Methode CharSequence.codePoints), erhalten Sie jedes Mal ganze Zeichenwerte, und Sie werden nie einen Ersatzwert sehen oder müssen.

Zum Zeitpunkt des Schreibens, Emojis von Unicode sind in den Emoticons Block ein Teil der Supplemental Symbols and Pictographs Block und drei legacy Zeichen im Miscellaneous Symbols Block zu sein.

So mit einem BufferedReader und durchquert die Zeichendaten mit ints könnte wie folgt aussehen:

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

Vielen Dank, das hat sehr geholfen. Ich weiß Ihre ausführliche Antwort zu schätzen. Ich hatte das Gefühl, dass ich nicht den richtigen Dateileser benutzte. – Wanda