これはおそらく他の場所で回答されていますが、int値の文字値をどのように取得しますか?
具体的には、tcpストリームからaを読み取り、リーダーの.read()メソッドはintを返します。
これから文字を取得するにはどうすればよいですか?
ストリームをテキストに変換しようとしている場合は、使用するエンコーディングを認識する必要があります。次に、バイト配列を String
コンストラクターに渡して Charset
を指定するか、代わりに適切なInputStreamReader
で Charset
を使用します。
int
からchar
への単純なキャストは、ストリームからバイトを直接読み取る場合、ISO-8859-1が必要な場合にのみ機能します。
編集:areがすでにReader
を使用している場合、read()
の戻り値をchar
にキャストするのが正しい方法です(-1かどうかを確認した後)またはない)...しかし、通常は一度にread(char[], int, int)
を呼び出してテキストブロック全体を読み取る方が効率的で便利です。ただし、戻り値をチェックして、読み取られた文字数を確認することを忘れないでください。
たぶんあなたが求めている:
Character.toChars(65) // returns ['A']
詳細: Character.toChars(int codePoint)
指定された文字(Unicodeコードポイント)を、char配列に格納されているUTF-16表現に変換します。指定されたコードポイントがBMP(Basic Multilingual PlaneまたはPlane 0)値の場合、結果のchar配列はcodePointと同じ値になります。指定されたコードポイントが補助コードポイントである場合、結果のchar配列には対応するサロゲートペアが含まれます。
「intをcharに変換する」という意味に依存します。
単にintに値をキャストしたい場合は、Javaの型キャスト表記を使用してキャストできます。
int i = 97; // 97 is 'a' in ASCII
char c = (char) i; // c is now 'a'
整数1を文字「1」に変換することを意味する場合、次のようにできます。
if (i >= 0 && i <= 9) {
char c = Character.forDigit(i, 10);
....
}
Int 5をchar '5'に単純に変換する場合:(整数0〜9のみ)
int i = 5;
char c = (char) ('0' + i); // c is now '5';
単純なキャスト:
int a = 99;
char c = (char) a;
これが機能しない理由はありますか?
このソリューションは、整数の長さのサイズ= 1で機能します。
Integer input = 9; Character.valueOf((char) input.toString().charAt(0))
サイズが1より大きい場合、forループを使用して繰り返し処理する必要があります。
ここでのほとんどの回答はショートカットを提案します。これは、何をしているかわからない場合に大きな問題を引き起こす可能性があります。ショートカットを使用する場合は、データのエンコードが正確に何であるかを知る必要があります。
Javaがドキュメントで文字について話すときはいつでも、16ビット文字について話します。
便利なメソッドがあるDataInputStream
を使用できます。効率のために、BufferedReader
でラップします。
// e.g. for sockets
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
char character = readChar(); // no need to cast
問題は、各readChar()
が実際に2つのread
を実行し、それらを1つの16ビット文字に結合することです。
US-ASCIIは、1文字をエンコードするために8ビットを予約しています。ただし、ASCIIテーブルは128の可能な文字のみを記述するため、1ビットは常に使用されません。
この場合、単にキャストを実行できます。
int input = stream.read();
if (input < 0) throw new EOFException();
char character = (char) input;
UTF-8、Latin-1、ANSIおよび他の多くのエンコーディングは、すべて8ビットを使用します。最初の7ビットはASCIIテーブルに続き、US-ASCIIエンコーディングのものと同じです。ただし、8ビット目では、これらすべてのエンコーディングで異なる文字が提供されます。したがって、ここで興味深いことが起こります。
あなたがカウボーイであり、8ビット目が重要でないと思う場合(つまり、 "à、é、ç、è、ô...のような文字を気にしない場合)、あなたは逃げることができます単純なキャスト。
ただし、これを専門的に行いたい場合は、テキスト(たとえば、ソケット、ファイルなど)をインポート/エクスポートするたびに、常に文字セットを指定する必要があります。
真剣になりましょう。上記のオプションはすべて安価なトリックです。柔軟なソフトウェアを作成する場合は、設定可能な文字セットをサポートしてデータをインポート/エクスポートする必要があります。一般的なソリューションは次のとおりです。
byte[]
バッファーを使用してデータを読み取り、それをString
に変換しますcharsetパラメーターを使用。
byte[] buffer = new byte[1024];
int nrOfBytes = stream.read(buffer);
String result = new String(buffer, nrOfBytes, charset);
また、charsetパラメーターでインスタンス化できるInputStreamReader
を使用することもできます。
もう1つの黄金律:バイトを文字に直接キャストしないでください。それは常に間違いです。
int i = 7;
char number = Integer.toString(i).charAt(0);
System.out.println(number);
たとえば、ユーザーがint
をchar
にリテラルに変換したいという仮定に基づいて私の答えを基にしています
Input:
int i = 5;
Output:
char c = '5'
これは既に上記で回答されていますが、整数値i > 10
の場合、char array
を使用する必要があります。
char[] c = String.valueOf(i).toCharArray();
これは、着信データのエンコードに完全に依存しています。
おそらく最速のものではありません:
//for example there is an integer with the value of 5:
int i = 5;
//getting the char '5' out of it:
char c = String.format("%s",i).charAt(0);