Dies wurde wahrscheinlich an anderer Stelle beantwortet, aber wie erhält man den Zeichenwert eines int-Werts?
Insbesondere lese ich ein aus einem TCP-Stream und die .read () -Methode des Readers gibt ein int zurück.
Wie bekomme ich einen Char daraus?
public int read(char[] cbuf)
löst nur die Verwendung das Problem?Antworten:
Wenn Sie versuchen, einen Stream in Text umzuwandeln, müssen Sie wissen, welche Codierung Sie verwenden möchten. Sie können dann entweder ein Array von Bytes an den
String
Konstruktor übergeben und ein angebenCharset
oder stattdessenInputStreamReader
das entsprechendeCharset
verwenden.Das einfache Casting von
int
tochar
funktioniert nur, wenn Sie ISO-8859-1 möchten und wenn Sie Bytes aus einem Stream direkt lesen.EDIT: Wenn Sie sind bereits mit
Reader
, dann den Rückgabewert des Gießensread()
aufchar
die richtige Art und Weise zu gehen (nach der Überprüfung , ob es -1 oder nicht) ... aber es ist normalerweise effizienter und bequemer zu nennenread(char[], int, int)
einen ganzen Block von lesen Text zu einem Zeitpunkt. Vergessen Sie jedoch nicht, den Rückgabewert zu überprüfen, um festzustellen, wie viele Zeichen gelesen wurden.quelle
InputStreamReader
in einBufferedReader
Vielleicht fragen Sie nach:
Mehr Info:
Character.toChars(int codePoint)
quelle
toChars
normalerweise unangemessen ist. Wenn er von einem Leser liest, ist es in Ordnung.Es hängt davon ab, was Sie unter "ein int in char konvertieren" verstehen.
Wenn Sie den Wert einfach in int umwandeln möchten, können Sie ihn mit der Typecast-Notation von Java umwandeln:
Wenn Sie die Ganzzahl 1 in das Zeichen '1' umwandeln möchten, können Sie dies folgendermaßen tun:
quelle
Wenn Sie einfach int 5 in char '5' konvertieren möchten: (Nur für ganze Zahlen 0 - 9)
quelle
Einfaches Casting:
Gibt es einen Grund, warum dies bei Ihnen nicht funktioniert?
quelle
Diese Lösung funktioniert für Integer-Längengröße = 1.
Integer input = 9; Character.valueOf((char) input.toString().charAt(0))
Wenn Größe> 1, müssen wir for-Schleife verwenden und durchlaufen.
quelle
Die meisten Antworten hier schlagen Verknüpfungen vor, die Ihnen große Probleme bereiten können, wenn Sie keine Ahnung haben, was Sie tun. Wenn Sie Verknüpfungen verwenden möchten, müssen Sie genau wissen, in welcher Codierung Ihre Daten enthalten sind.
UTF-16
Immer wenn Java in seiner Dokumentation über Zeichen spricht, spricht es über 16-Bit-Zeichen.
Sie können eine verwenden
DataInputStream
, die bequeme Methoden hat. Wickeln Sie es aus Effizienzgründen in aBufferedReader
.Die Sache ist, dass jeder
readChar()
tatsächlich 2read
's ausführt und sie zu einem 16-Bit-Zeichen kombiniert.US-ASCII
US-ASCII reserviert 8 Bits, um 1 Zeichen zu codieren. Die ASCII-Tabelle beschreibt jedoch nur 128 mögliche Zeichen, sodass 1 Bit immer nicht verwendet wird.
In diesem Fall können Sie einfach eine Besetzung durchführen.
Erweitertes ASCII
UTF-8, Latin-1, ANSI und viele andere Codierungen verwenden alle 8-Bit. Die ersten 7-Bit folgen der ASCII-Tabelle und sind identisch mit denen der US-ASCII-Codierung. Das 8. Bit bietet jedoch Zeichen, die sich in all diesen Codierungen unterscheiden. Hier wird es also interessant.
Wenn Sie ein Cowboy sind und denken, dass das 8. Bit keine Rolle spielt (dh Sie interessieren sich nicht für Charaktere wie "à, é, ç, è, ô ...), können Sie mit einer einfachen Besetzung davonkommen.
Wenn Sie dies jedoch professionell tun möchten, sollten Sie IMMER einen Zeichensatz angeben, wenn Sie Text importieren / exportieren (z. B. Sockets, Dateien ...).
Verwenden Sie immer Zeichensätze
Lass uns ernst werden. Alle oben genannten Optionen sind billige Tricks. Wenn Sie flexible Software schreiben möchten, müssen Sie einen konfigurierbaren Zeichensatz zum Importieren / Exportieren Ihrer Daten unterstützen. Hier ist eine generische Lösung:
Lesen Sie Ihre Daten mit einem
byte[]
Puffer und konvertieren Sie dieseString
mithilfe eines Zeichensatzparameters in einen .Sie können auch eine verwenden,
InputStreamReader
die mit einem Zeichensatzparameter instanziiert werden kann.Nur noch eine goldene Regel: Wirf niemals ein Byte direkt auf einen Charakter. Das ist immer ein Fehler.
quelle
Gründend meine Antwort auf der Annahme , dass der Benutzer wollte nur literaaly eine konvertieren
int
zuchar
, zum BeispielDies wurde bereits oben beantwortet, wenn jedoch der ganzzahlige Wert
i > 10
verwendet werden musschar array
.quelle
quelle
Dies hängt vollständig von der Codierung der eingehenden Daten ab.
quelle
vielleicht nicht der schnellste:
quelle
Die Antwort für die Konvertierung von char in int oder long ist einfaches Casting.
Zum Beispiel: - Wenn Sie Char '0' in long umwandeln möchten.
Folgen Sie der einfachen Besetzung
Getan!!
quelle