Java中的自然排序顺序字符串比较 - 内置一个吗?

2022-08-31 13:21:01

我想要某种字符串比较函数来保留自然排序顺序1。Java中内置了类似的东西吗?我在 String 类中找不到任何内容,并且 Comparator 类只知道两个实现。

我可以自己滚动(这不是一个非常困难的问题),但是如果没有必要,我宁愿不重新发明轮子。

在我的特定情况下,我有想要排序的软件版本字符串。因此,我希望“1.2.10.5”被视为大于“1.2.9.1”。


1 通过“自然”排序顺序,我的意思是它比较字符串的方式与人类比较它们的方式相反,而不是“ascii-betical”排序顺序,只有程序员才有意义。换句话说,“image9.jpg”小于“image10.jpg”,“album1set2page9photo1.jpg”小于“album1set2page10photo5.jpg”,“1.2.9.1”小于“1.2.10.5”


答案 1

在java中,“自然”顺序的意思是“词典编纂”顺序,因此核心中没有像你正在寻找的实现。

有开源实现。

这是其一:

自然顺序比较器.java

请务必阅读:

Cougaar 开源 License

我希望这有帮助!


答案 2

我测试了其他人在这里提到的三个Java实现,发现他们的工作略有不同,但没有一个像我预期的那样。

AlphaNumericStringComparatorAlphanumComparator 都不会忽略空格,因此将其放在 前面。pic2pic 1

另一方面,NaturalOrderComparator 不仅忽略空格,还忽略所有前导零,因此在 前面。sig[1]sig[0]

关于性能,AlphaNumericStringComparator比其他两个慢约x10。