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

编程语言:Java任务:设计一个将中文字符串映射到数字的哈希函数问题:正确读取和显示汉字

这是一个家庭作业问题,但我不是在问这个问题,只是在实现阅读汉字时遇到了麻烦。

我的任务的简短描述:设计一个哈希函数,将我们class级中的学生姓名映射到他们的学生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

巴乔。

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

创建扫描程序时,您还可以告诉它使用哪种字符编码。 这是文档。

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

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

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

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