これはおそらく他の場所で答えられていますが、int値の文字値をどのように取得しますか?
具体的には、tcpストリームからaを読み取り、readers .read()メソッドがintを返します。
これからイワナを取得するにはどうすればよいですか?
これはおそらく他の場所で答えられていますが、int値の文字値をどのように取得しますか?
具体的には、tcpストリームからaを読み取り、readers .read()メソッドがintを返します。
これからイワナを取得するにはどうすればよいですか?
回答:
ストリームをテキストに変換しようとしている場合は、使用するエンコーディングを認識する必要があります。次に、バイト配列をStringコンストラクターに渡してを提供するCharsetかInputStreamReader、適切なをCharset代わりに使用します。
ストリームから直接バイトを読み取っている場合に、ISO-8859-1が必要な場合intにcharのみ、からへのキャストは機能します。
EDIT:あなたがいる場合され、すでに使用してReader、その後の戻り値のキャストread()にはchar(それが-1だかどうかを確認した後に)行くための正しい方法です...しかし、それは呼び出すために、通常、より効率的で便利だread(char[], int, int)のブロック全体を読み取るために一度にテキスト。ただし、戻り値を確認して、読み込まれた文字数を確認することを忘れないでください。
InputStreamReaderでBufferedReaderのJavadocで述べたように、docs.oracle.com/javase/8/docs/api/java/io/...
たぶんあなたが求めているのは:
Character.toChars(65) // returns ['A']
より詳しい情報: Character.toChars(int codePoint)
指定された文字(Unicodeコードポイント)を、char配列に格納されているUTF-16表現に変換します。指定されたコードポイントがBMP(Basic Multilingual PlaneまたはPlane 0)値である場合、結果のchar配列はcodePointと同じ値になります。指定されたコードポイントが補足コードポイントである場合、結果のchar配列には対応するサロゲートペアがあります。
toCharsは通常不適切であるということです。彼がリーダーから読んでいる場合は、問題ありません。
「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;
これがうまくいかない理由はありますか?
ここでのほとんどの回答はショートカットを提案しています。これは、何をしているのかわからない場合に大きな問題を引き起こす可能性があります。ショートカットを使いたい場合は、データのエンコーディングを正確に把握する必要があります。
ドキュメンテーションで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 文字セットパラメータを使用してに変換します。
byte[] buffer = new byte[1024];
int nrOfBytes = stream.read(buffer);
String result = new String(buffer, nrOfBytes, charset);
InputStreamReadercharsetパラメータでインスタンス化できるを使用することもできます。
もう1つの黄金律:バイトを文字に直接キャストしないでください。それは常に間違いです。
int i = 7;
char number = Integer.toString(i).charAt(0);
System.out.println(number);
これは、着信データのエンコーディングに完全に依存しています。
多分最速ではない:
//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);
charをintまたはlongに変換する答えは、単純なキャストです。
例:-Char '0'をlongに変換する場合。
シンプルキャストをフォローする
Char ch='0';
String convertedChar= Character.toString(ch); //Convert Char to String.
Long finalLongValue=Long.parseLong(convertedChar);
できました!
public int read(char[] cbuf)するだけで問題が解決するでしょうか?