2011-08-30 72 views
5

我需要检查中文省份是否包含在中文地址中。与Java中的中文字符(使用UTF-8编码)匹配

我能够轻松地读写汉字。

我试着用String的indexOf()方法来检查一个省(例如广东)是否包含在一个地址(中国广东)内。但是,这总是返回-1。

当我尝试检查数字(例如103是否包含在9910399内)时,它工作正常。

我需要做一些不同的事情来处理UTF-8字符串匹配吗? 谢谢。 马特

+3

Java'String'在内部总是UTF-16,所以无论你遇到什么问题都不是UTF-8相关的。你是否100%肯定字符串中的字符与你正在搜索的字符完全相同?双方检查'System.out.println((int)s.charAt(i))'。 –

+2

您的示例适用于我,您是否检查过您的.java文件使用正确的编码进行保存? –

回答

2

我刚刚试过你的例子,虽然我的系统上没有Chineese字体,所以字符显示不正确indexOf()对我来说工作正常。

因此,检查你的源文件(* .java)的编码。例如,如果您使用的是eclipse,请在Window/Preferences/General/Workspace/Text file Encoding下检查它。我正在使用UTF-8。

第二个想法是java编译器使用的编码。在日食的情况下,你不必说任何话。我认为javac你可能应该使用-encoding明确设置编码。否则,可能会使用默认的操作系统编码。

祝你好运。

+0

嗨,亚历克斯,非常感谢!我意识到我不够具体。你是对的 - 如果我直接使用字符串,上面的例子工作正常。当我从文件中读取这些字符串时会发生问题。我打印出实际的字符,并且我注意到ASCII 34在Unicode字符之前出现。 –

+0

看起来我没有一个中国特有的问题 - 它是一个文件阅读问题。我有2个文件 - 省和地址。我在省里有角色A,在地址上有AB。当我使用readline()读取它们并将其打印出来时,我看到以下内容被打印出来(1)对于只有A - 34:65:34(2)的省份,只有AB - 34:65:66:34不知道我该怎么做才能确保该省的地址匹配,或A匹配AB –

+0

@Matt - AlexR是正确的;查看采用编码(字符串ID或字符集)输入的相关I/O方法。您必须始终根据需要解码文本数据输入(包括Java源文件)。请参阅[这里](http://illegalargumentexception.blogspot.com/2009/05/java-rough-guide-to-character-encoding.html)了解基本引物。请参阅[这里](http://illegalargumentexception.blogspot.com/2009/09/java-character-inspector-application.html)了解可帮助诊断问题的原始应用程序。 – McDowell