room1, room2, room100
room1, room100, room2
尝试这个比较器,它删除所有非数字字符,然后将其余字符作为数字进行比较:
Collections.sort(strings, new Comparator<String>() {
public int compare(String o1, String o2) {
return extractInt(o1) - extractInt(o2);
}
int extractInt(String s) {
String num = s.replaceAll("\\D", "");
// return 0 if no digits found
return num.isEmpty() ? 0 : Integer.parseInt(num);
}
});
这里有一个测试:
public static void main(String[] args) throws IOException {
List<String> strings = Arrays.asList("room1.2", "foo1.1", "foo", "room2.3", "room100.999", "room10", "room.3");
Collections.sort(strings, new Comparator<String>() {
public int compare(String o1, String o2) {
return extractInt(o1) - extractInt(o2);
}
int extractInt(String s) {
String num = s.replaceAll("\\D", "");
// return 0 if no digits found
return num.isEmpty() ? 0 : Integer.parseInt(num);
}
});
System.out.println(strings);
}
产出:
[foo, room1, room2, room10, room100]
当数字是小数时(也演示了Java8+样式):
public static void main(String[] args) {
List<String> strings = Arrays.asList("room1.2", "foo1.1", "room2.3", "room100.999", "room10", "room.3");
Collections.sort(strings, Comparator.comparing(Application::extractDouble));
System.out.println(strings);
}
static double extractDouble(String s) {
String num = s.replaceAll("[^\\d.]", "");
// return 0 if no digits found
return num.isEmpty() ? 0 : Double.parseDouble(num);
}
结果:
[foo, room.3, foo1.1, room1.2, room2.3, room10, room100.999]
问题内容: 我想对具有nr的字符串进行排序。我怎么做? 可以说我的整数是 在主要我做class2.Sort(); 提前致谢。 问题答案:
问题内容: 我正在尝试对字符串列( 包含数字 )进行排序。 您会看到Mysql的自然排序算法放在后面( 对于大多数应用程序来说都可以 ),但是我有独特的需求,因此我希望结果应该像这样排序。 仅使用SQL 是否可能,或者我必须在应用程序级别操纵结果集? 问题答案: 继续 假设 它始终为WORD_space_NUMBER,这应该可行: 使用POSITION查找空间,使用SUBSTRING捕获其后的数字
示例: 我们的名单上有5个名字:凯文、汉斯、弗里茨、汉·索罗、彼得 我现在想要所有在顶部包含“han”的名字。 因此排序后的列表如下所示: Hans,Han Solo,Kevin,Fritz,Peter 到目前为止我所尝试的: 什么都没有,因为我没有线索,但我已经谷歌了,没有找到任何东西。 从列表中删除/添加项目不是一个选项,因为我正在使用(ControlsFX组件)中的列表,其中每个项目都具有会
问题内容: 我有默认的字符串比较器(在SortedSet中)有问题。问题是默认比较器不能对包含数字的好的字符串进行排序,即:在集合中,我具有: 自然排序应该与上面类似,但是在集合中我有: 我知道为什么会这样,但是我不知道如何更改它。 问题答案: 尝试使用此比较器,该比较器将删除所有非数字字符,然后将其余字符与数字进行比较: 这是一个测试: 输出: 当数字为小数时(也表示Java 8+样式): 结果
问题内容: 我需要编写一个比较字符串的Java Comparator类,但是要稍作改动。如果要比较的两个字符串在字符串的开头和结尾相同,并且中间不同的部分是整数,则根据这些整数的数值进行比较。例如,我希望以下字符串按显示顺序结束: aaa bbb 3 ccc bbb 12 ccc ccc 11 ddd eee 3 ddd jpeg2000 eee eee 12 ddd jpeg2000 eee 如
问题内容: 允许用户使用字符串数组进行演奏。他们可以将字符串添加到数组中,从数组中删除字符串,在数组中搜索字符串,最终他们将能够对数组进行排序。排序使我很困惑。我尝试了几种不同的方法。第一种方法是将数组转换为ArrayList并使用Collections对ArrayList进行排序,然后将其转换回静态类数组。没用 我尝试的第二种方法是遍历数组,并尝试仅对用户添加的字符串进行排序,而不是对数组中的所