我需要编写一个比较字符串的 Java Comparator 类,但是有一个转折。如果它比较的两个字符串相同,首尾相同,中间不同的部分是一个整数,则根据这些整数的数值进行比较。例如,我希望以下字符串按显示顺序结束:
- 啊啊
- bbb 3 抄送
- bbb 12 ccc
- CCC 11
- DDD
- eee 3 ddd jpeg2000 eee
- eee 12 ddd jpeg2000 eee
如您所见,字符串中可能还有其他整数,所以我不能只使用正则表达式来分解任何整数。我正在考虑从头开始遍历字符串,直到找到不匹配的位,然后从末尾走直到找到不匹配的位,然后将中间的位与正则表达式“[0-9]+”,如果比较,则进行数值比较,否则进行词法比较。
有没有更好的办法?
更新 我认为我不能保证字符串中的其他数字(可能匹配的数字)周围没有空格,或者不同的数字确实有空格。
原文由 Paul Tomblin 发布,翻译遵循 CC BY-SA 4.0 许可协议
字母数字算法
从网站
“人们用数字对字符串进行排序与软件不同。大多数排序算法比较 ASCII 值,这会产生与人类逻辑不一致的排序。下面是解决方法。”
编辑:这是从该站点到 Java Comparator Implementation 的链接。