在比较字符串时,维护在 Perl 和 Java 中提供相同排序规则的函数的最佳方法是什么?这是 Perl 中的示例函数:
sub compare_strs
{
my ( $str1, $str2 ) = @_;
# Treat vars as strings by quoting.
# Possibly incorrect/irrelevant approach.
return ("$str1" cmp "$str2");
}
这里的担忧是:
在比较字符串时,维护在 Perl 和 Java 中提供相同排序规则的函数的最佳方法是什么?这是 Perl 中的示例函数:
sub compare_strs
{
my ( $str1, $str2 ) = @_;
# Treat vars as strings by quoting.
# Possibly incorrect/irrelevant approach.
return ("$str1" cmp "$str2");
}
这里的担忧是:
对于 Perl,不要使用cmp
运算符。相反,您应该使用该Unicode::Collate
模块:
use Unicode::Collate;
sub compare_strs
{
my ( $str1, $str2 ) = @_;
# Treat vars as strings by quoting.
# Possibly incorrect/irrelevant approach.
return $Collator->cmp("$str1", "$str2");
}
如果您担心规范化(例如,组合标记的顺序),您也可以使用该Unicode::Normalize
模块。
在 Java 中,使用Collator
类,如有关比较字符串的教程中所述。有关规范化,请参阅规范化文本教程。Java 1.6 中引入了所需的类;如果您需要支持早期版本的 Java,则需要使用ICU 库之类的东西。
使用如上所述的适当工具应确保两种环境的行为都符合Unicode 排序算法(因此彼此兼容)。