如何使用Java中的Scanner正确读取中文字符?

时间:2012-10-15 14:46:23

标签: java

编程语言: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读取输入,我已经尝试将String转换为char数组,然后转换为其int unicode等效,但它提出了一个荒谬的数字,我无法显示它正确。

我意识到我可以使用这个错误的值来设计哈希函数,但是为了不创建可能的冲突(我不知道这些是否会产生UNIQUE错误的值),为了学习,你能不能指出我如何统一不同机器上的汉字输入?

永远感激你的想法。 :d

巴乔。

3 个答案:

答案 0 :(得分:3)

创建扫描程序时,您还可以告诉它使用哪种字符编码。 Here is the documentation.

答案 1 :(得分:3)

如果不使用基本ASCII字符,则需要考虑使用哪个字符集。通常它将是UTF-8,但也可以使用其他字符集。

要记住的一件事是非ASCII字符的大小可能超过1个字节。汉字也是如此。

处理多字节字符时,您需要考虑代码点(代表UTF-8字符的整数)而不是单字节字符。

较新版本的Java允许您使用代码点迭代String。查看Java API for String。

答案 2 :(得分:1)

你在想这个。每个String已经(在概念上)是一系列字符,包括中文字符。只有在需要将其转换为字符时才会进行编码,而您不需要为其进行分配。只需使用String的哈希码即可。事实上,当你创建一个HashMap<String,YourObject>时,这正是幕后发生的事情。