繁体   English   中英

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

[英]How can I read Chinese characters correctly using Scanner in 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

巴乔。

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM