编程语言: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
巴乔。
答案 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>
时,这正是幕后发生的事情。