1

If I use BufferReader to read a line, I can get a string of a line. The code is this :

FileInputStream fs = new FileInputStream("E:\\tmp\\aaa.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fs));


String line = null;  
while ((line = br.readLine()) != null) { 
    System.out.println(line.length() + " " +line.substring(0, 2);
}

The contents of aaa.txt is :

一二三四1234

so. the result of running the code is :

8 一二

From the result , I know the length of a chinese character in String is one, not two.

So If I use line.substring(0,2), I get two chinese character "一二". But I hope that, the result of line.substring(0,2) is "一".

I mean that, in my eye the length of "一二三四1234" is 12, not 8.I can use substring(0,2) to extract fixed length character.

Thanks in advance.

4

4 に答える 4

1

結果から、Stringの漢字の長さは2ではなく1であることがわかります。

そうです、すべての記号は文字なので、これらの「一二三四1234」文字列の長さは8です。

では、なぜ12なのですか?

つまり、私の目には、「一二三四1234」の長さは8ではなく12です。substring(0,2)を使用して固定長の文字を抽出できます。

必要な文字のインデックスがわかっている場合は、代わりに以下のコードを使用できます。

String s = "一二三四1234";
char c = s.charAt(0);

メソッドsubStringは、インデックス0から2までの新しい文字列を作成するためです。

于 2013-03-20T09:03:59.893 に答える
0

Java は内部文字セットとして unicode を使用するため、すべての char 型は unicode です。また、java.lang.String は char で構成されます。

リーダーから文字列を取得すると、ファイルのバイトコンテンツは、ファイルのエンコーディングに基づいてすでに文字に変換されています。

line.substring(0, 2) は、の最初の 2 文字が返される新しい文字列になります。これは既に取得したものです!

「私の目には長さ」は、UltraEdit のようなテキスト エディタで、おそらくエディタがファイル内のバイトの位置を表示することを意味することを意味すると思います

于 2013-03-20T09:10:04.683 に答える
0

line.substring(0,2) を使用すると、「一二」という漢字が 2 つ表示されます。

ということで、キャラクターは2体。それがあなたが求めたものです。インデックス 0 と 1 の 2 つの文字。

しかし、line.substring(0,2) の結果が「一」であることを願っています。

1キャラのみご希望の場合は1キャラでお願い致します。line.substring(0,1)たとえば、インデックス 0 の文字。

于 2013-03-20T09:03:09.980 に答える