1
import java.io.*;
class Test{
    public static void main(String args[])throws IOException{
        char a[]=new char[4];       
        DataInputStream in=new DataInputStream(System.in);
        for(int i=0;i<4;i++)
            a[i]=in.readChar();
        System.out.println("Characters are : ");
        for(int i=0;i<4;i++)
            System.out.println(a[i]);
    }   
}

出力:

java Test
a
s
d
f
Characters are : 
愊
猊
搊
昊

ここでは、a、s、d、および f の文字を読み取りますが、他の文字も表示されます。

4

3 に答える 3

0

これをチェックしてください、これはうまくいきます、

        char a[]=new char[4];      
        Scanner in =new Scanner(System.in);
        for(int i=0;i<4;i++) {
            a[i]=(char) in.next().charAt(0);
        }
        System.out.println("Characters are : ");
        for(int i=0;i<4;i++) {
            System.out.println(a[i]);
        }

コードの問題は次のとおりです。

入力が与えられている間、入力のバイト形式が考慮され、バイトのUnicode値がaに格納されるため、特殊文字が取得されます。

DataInputStreamの処理方法がわからなかったので、Scannerで行いました。

お役に立てれば!

于 2013-10-05T17:18:29.160 に答える
0

入力文字は以下のロジックで操作されます:

(char)((a << 8) | (b & 0xff))

readCharドキュメントを参照してください:

public char readChar() が IOException をスローする

入力 char を読み取り、char 値を返します。Unicode char は 2 バイトで構成されます。a を最初に読み取ったバイト、b を 2 番目のバイトとします。返される値は次のとおりです: (char)((a << 8) | (b & 0xff))

このメソッドは、インターフェイス DataOutput の writeChar メソッドによって書き込まれたバイトを読み取るのに適しています。

于 2013-10-05T17:07:37.707 に答える
0

文字を読むだけなら、より良いオプションがあります。BufferedReader

クラスを使用して を取得できpublic static BufferedReader newBufferedReader(Path path, Charset cs)ます。文字セットのサポートに加えて、データをバッファリングするため、非常に効率的です:)FilesBufferedReader

于 2013-10-05T17:01:54.003 に答える