在Java中,是否需要一个Collator来精确匹配utf-8字符串?

在Java中,是否需要一个Collator来精确匹配utf-8字符串?,java,utf-8,internationalization,Java,Utf 8,Internationalization,在java中比较两个utf-8字符串(一个是文本,另一个是要查找的模式)以获得精确匹配时,是否需要使用Collator,或者规范化两个字符串并使用简单的字符比较就足够了 有关国际化文本搜索和拼贴器使用的更多信息,请参阅 示例:在西班牙语中,“ch”可能是一个字母,而在英语中是两个字母。所以“Chiapas”这个词看起来可能是一样的,但如果不考虑这个问题,匹配就会失败。只要使用它就可以了 仅供参考,String.getBytes()方法,但这与比较“精确匹配”不相关-这是String.equals

在java中比较两个utf-8字符串(一个是文本,另一个是要查找的模式)以获得精确匹配时,是否需要使用Collator,或者规范化两个字符串并使用简单的字符比较就足够了

有关国际化文本搜索和拼贴器使用的更多信息,请参阅

示例:在西班牙语中,“ch”可能是一个字母,而在英语中是两个字母。所以“Chiapas”这个词看起来可能是一样的,但如果不考虑这个问题,匹配就会失败。

只要使用它就可以了

仅供参考,String.getBytes()方法,但这与比较“精确匹配”不相关-这是String.equals(String)所做的。

只需使用


仅供参考。
String.getBytes()
方法,但这与比较“精确匹配”不相关-这是String.equals(String)所做的。

String.equals
已经逐字符进行比较,因此对于精确匹配(即,不考虑等),您可以使用它。

String.equals已经逐字符进行比较,因此对于精确匹配(即不考虑等),您可以使用它。

如果您搜索精确匹配,我认为规范化就足够了。例如,如果仅使用
Collator,则需要
Collator。主要的
差异是有意义的。

如果搜索精确匹配,我认为规范化就足够了。例如,如果只有
Collator,则需要
Collator。主要的
差异是有意义的。

Collator用于排序。String.equals()用于相等比较。

排序符用于排序。String.equals()用于相等比较。

您所说的“UTF-8字符串”是什么意思?当它成为Java中的一个字符串时,原始的二进制编码是不相关的。你能给我们一个两个“完全匹配”的字符串作为边缘大小写的例子吗,这样我们就知道你的意思了?例如:在西班牙语中,“ch”可能是一个字母,而在英语中是两个字母。所以“Chiapas”这个词看起来可能是一样的,但如果不考虑这一点,匹配就会失败。你说的“UTF-8字符串”是什么意思?当它成为Java中的一个字符串时,原始的二进制编码是不相关的。你能给我们一个两个“完全匹配”的字符串作为边缘大小写的例子吗,这样我们就知道你的意思了?例如:在西班牙语中,“ch”可能是一个字母,而在英语中是两个字母。因此,“CHIAPAS”一词可能看起来是一样的,但是如果没有考虑到,匹配将失败。我需要考虑归一化,因为我将处理不同语言的文本。@ ReYES,什么是“精确匹配”?RReyes,它将通过char匹配来做一个字符。Artefactor暗示的是,如果您通过国际化库使用字符串替换,它将不会将字符串的意大利语版本与德语版本匹配。同样的语言匹配不是一个问题。顺便说一句,“我需要考虑标准化,因为我将用不同的语言处理文本”对我来说并没有什么意义。我看不出因果关系。@ AtfFaTo找到文本中出现模式的所有地方。我需要考虑归一化,因为我将处理不同语言的文本。@ ReYES,什么是“精确匹配”?RReyes,它将通过字符匹配来做一个字符。Artefactor暗示的是,如果您通过国际化库使用字符串替换,它将不会将字符串的意大利语版本与德语版本匹配。同样的语言匹配不是一个问题。顺便说一句,“我需要考虑标准化,因为我将用不同的语言处理文本”对我来说并没有什么意义。我看不出因果关系。@artifact查找文本中模式出现的所有位置。字符串在Java中是Unicode。我不认为他们是UTF-8。。。但是我可能错了,字符串是unicode是的,但是getbytes返回UTF-8字节——请看Java中的字符串是unicode。我不认为他们是UTF-8。。。但我可能在这一点上错了。字符串是unicode是的,但getbytes返回UTF-8字节-请参阅