java - 对可能包含数字的字符串进行排序

标签 java algorithm string sorting comparison

我需要编写一个 Java Comparator 类来比较字符串,但有一个转折点。如果要比较的两个字符串的开头和结尾相同,并且中间不同的部分是整数,则根据这些整数的数值进行比较。例如,我希望以下字符串按照显示顺序结束:

  • aaa
  • bbb 3 ccc
  • bbb 12 ccc
  • CCC 11
  • ddd
  • eee 3 ddd jpeg2000 eee
  • eee 12 ddd jpeg2000 eee

正如你所看到的,字符串中可能还有其他整数,所以我不能只使用正则表达式来分解任何整数。我正在考虑从头开始遍历字符串,直到找到不匹配的位,然后从末尾遍历直到找到不匹配的位,然后将中间的位与中间的位进行比较正则表达式“[0-9]+”,如果比较则进行数值比较,否则进行词法比较。

有更好的方法吗?

更新我认为我不能保证字符串中的其他数字(可能匹配的数字)周围没有空格,或者不同的数字确实有空格.

最佳答案

The Alphanum Algorithm

来自网站

“人们对带有数字的字符串进行排序的方式与软件不同。大多数排序算法都会比较 ASCII 值,这会产生与人类逻辑不一致的排序。以下是修复它的方法。”

编辑:这是指向 Java Comparator Implementation 的链接来自该网站。

关于java - 对可能包含数字的字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60205376/

相关文章:

java - 通过 POST 从 Angular 向 Springboot 发送数据

java - Spring Data Mongodb - 用于收集不同类型的存储库

java - 使用房间数据库存储枚举即使使用 TypeConverters 也会出错

javascript - AngularJS 格式 JSON 字符串输出

c# - 将逗号分隔的字符串解析为某种我可以循环访问各个值的对象的最简单方法?

java - 用于停止和反转对象的按钮监听器 (GUI)

algorithm - 螃蟹图,算法,图论,这个网络流程如何?

algorithm - 检查调整后的相同二叉树的时间复杂度

algorithm - 如何将请求分派(dispatch)和自动分配给最近的司机

python - 将元组拆分为列表而不将其拆分为单个字符