4

プログラミング言語: Java タスク: 中国語の文字列を数字にマッピングするハッシュ関数の設計 問題: 漢字の正しい読み取りと表示

これは宿題の質問ですが、漢字の読み方を実装するのに苦労しているだけで、やり方を聞いているわけではありません。

私の仕事の簡単な説明: 私たちのクラスの (中国の) 学生の名前を学生 ID やその他の衛星データ (性別、電話番号など) にマップするハッシュ関数を設計することです。

私はまだそれについて考えていますが、他の言語と同じように、これの範囲には、文字の文字エンコーディングを使用して、ハッシュ関数を介して、間違いがなければ一意の値を考え出すことが含まれます。

この一連の思考の妥当性をテストするために私がしなければならないことは次のとおりです。

// test whether console can read chinese characters
Scanner s = new Scanner(System.in);

System.out.print("Please enter a Chinese character: ");
int chi = (int)s.next().toCharArray()[0];

System.out.println("\nThe string entered is " + chi);

単純な System.out.println("character") ステートメントを使用すると、正しい文字が表示されます。

しかし、上記のように、Scanner を使用して入力を読み取る場合、文字列を char 配列に変換してから、それに相当する int Unicode に変換しようとしましたが、ばかげた数値になり、正しく表示できません。

この誤った値を使用してハッシュ関数を設計できることはわかっていますが、衝突の可能性を作成しないようにするため (これらが一意の誤った値を生成するかどうかはわかりません)、学習のために、どのように指摘できますか?異なるマシン間で漢字の入力を統一することはできますか?

いつも感想ありがとうございます。:D

バッジョ。

4

3 に答える 3

3

スキャナを作成するときに、使用する文字エンコーディングを指定することもできます。これがドキュメントです。

于 2012-10-15T14:52:08.033 に答える
3

基本的な ASCII 文字を使用していない場合は、使用している文字セットを考慮する必要があります。ほとんどの場合、UTF-8 になりますが、他の文字セットも使用できます。

注意すべきことの 1 つは、非 ASCII 文字のサイズが 1 バイトを超える可能性があることです。これは漢字にも当てはまります。

マルチバイト文字を扱うときは、シングルバイト文字ではなくコードポイント (UTF-8 文字を表す整数) の観点から考える必要があります。

Java の新しいバージョンでは、コードポイントを使用して文字列を反復処理できます。Java API for String を見てください。

于 2012-10-15T15:13:48.657 に答える
1

あなたはこれを考えすぎています。EveryStringはすでに (概念的に) 漢字を含む一連の文字です。エンコーディングは、割り当てに必要のないバイトに変換する必要がある場合にのみ含まれます。Stringのハッシュコードを使用するだけです。実際、 を作成するHashMap<String,YourObject>と、まさにそれが舞台裏で行われます。

于 2012-10-15T15:46:14.160 に答える