2011-08-30 71 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