有没有办法用不同的语言对字符串进行正确的排序?在德语中我们有Umlaute,例如'ä'应该按升序排序顺序排在'a'之后。
我正在使用ObjectUtil.stringCompare(),但它总是将这些特殊字符放在最后。任何想法如何解决这个问题?我认为语言环境(de_DE)会处理它,但事实并非如此。
谢谢, 马丁
答案 0 :(得分:0)
您可以编写自己的比较函数并将其传递给array.sort(compareFunction)。 compareFunction(a,b):int应比较两个字符串,如果>则返回-1。 b,如果a = b,则为0;如果a = b,则为1。湾 在该功能中,您需要逐个符号地比较您的字符串,并考虑特殊的德语符号。
答案 1 :(得分:0)
我不知道AS3,但几乎所有支持Locale的语言都应该具有字符串或排序的语言环境感知比较功能。
例如,以下是区域设置感知字符串比较localeCompare()。
答案 2 :(得分:0)
在ECMAScript第三版(以及ActionScript和当前浏览器JavaScript)中,有string.localeCompare
方法。这会进行比较,具体取决于当前的客户端区域设置。例如,如果我将系统区域设置(在Windows术语中,“与您要使用的非Unicode程序的语言版本匹配的语言”)设置为“德语(德国)”并将javascript:alert('ä'.localeCompare('b'))
设置为-1
1}},但是用英语我得到1
。
但是,依赖于客户端语言环境通常是有问题的。您的应用程序将根据客户端操作系统安装的不同而有所不同,并且用户更改系统区域设置并不像在Web浏览器首选UI中选择其他语言那样容易。如果可能的话,我会避免它,并且:或者:
在比较之前进行ad-hoc字符串替换(例如ä
与ae
)。如果您只担心一些变音符号,这可能没问题,但是覆盖整个Unicode甚至整个拉丁语变音集都是不可行的。
尝试在服务器端进行比较,使用比ECMAScript更好的字符模型支持的脚本语言。