【发布时间】:2017-09-06 14:44:16
【问题描述】:
我用谷歌搜索了一下,但无法找到解决这种特定问题的方法。我有一个List 的 POJO,它确实有一个名为 displayCode(字符串类型)的字段。 displayCode 可以有不同的格式。一些例子:
622
622-S
622-1
623
624
625
625-S
625-1
625-1-S
625-2
625-2-S
排序后,它们也应该按上图所示的顺序排列。使用普通的s1.compareTo(s2); 我会收到这样的订单:
1
10
100
101
102
...
这显然不适合我的需要。可悲的是,我没有计划如何以任何顺利的方式实现这一目标(也没有其他方式)。另请注意,我无法使用 Java 8 中的任何内容。
用于测试目的的代码(你可以玩弄它):
List<String> s = new ArrayList<String>(Arrays.asList(new String[] { "622", "622-S", "622-1", "623", "625",
"625-S", "625-1", "625-1-S", "625-2", "625-2-S", "6", "60", "666", "1", "2", "3" }));
Collections.sort(s,new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return 0;
}
});
System.out.println(s);
编辑:
我的第一个想法是将直到第一个 - 的数字转换为一个 int 并进行比较,然后按照我的方式处理其他部分。然而这听起来并不顺利。
【问题讨论】:
-
在担心顺利之前,您可能需要专注于有效。
-
你唯一的问题似乎是最后的 S,因为正常的比较会给你:1、2、3、6、60、622、622-1、622-S、623、625 , 625-1, 625-1-S, 625-2, 625-2-S, 625-S, 666
-
您能否对上面实际列出的数组中的元素显示“错误”排序?
-
@MárioFernandes:不,因为
625-10-S会在625-2-S之前出现(OP 强调了这个问题,问题中的数字位数不同,所以我们可以假设不仅仅是实际引用的示例代码中的数字)。 -
@T.J.Crowder 你确实是对的
标签: java compare comparator string-comparison