我有一个字符序列列表。我需要按照感觉自然的顺序对它们进行排序。我用Java编写代码。
我最初的想法是使用Collections.sort()
。但我认为这个方法遵循ASCII顺序,它分隔小写和大写文本。这不是一个自然的流程。
尝试定义“自然分类”我快速搜索并找到了NISO TR03-1999标准,似乎解决了这个问题。
所以我想我需要一种方法来使用该标准中定义的算法进行排序。 Java中有一个函数可以这样做吗?或者我是否需要自己实施?
我在这里有什么东西可以忽略吗?
过去有没有人遇到过类似的问题?你是怎么处理它的?
这是测试Collections.sort()的代码示例:
List<String> list = new ArrayList<String>();
list.add("z");
list.add("a");
list.add("Z");
list.add("A");
list.add("z 1");
list.add("a 1");
list.add("Z 1");
list.add("A 1");
list.add(" space");
list.add("!");
list.add(".");
list.add(";");
list.add("\\");
list.add("/");
list.add("+");
list.add("1");
list.add("2");
list.add("10");
list.add("1abc");
list.add("2abc");
list.add("10abc");
Collections.sort(list);
for (String string : list)
System.out.println(string);
答案 0 :(得分:2)
您可以创建自己的比较器类来比较并忽略大小写。
static class StringCompare implements Comparator<String> {
public int compare(String s1, String s2){
return s1.toLowerCase().compareTo(s2.toLowerCase());
}
}
然后用它来排序:
Collections.sort(list, new StringCompare());
答案 1 :(得分:2)
看看Collator。这里是文档:https://docs.oracle.com/javase/8/docs/api/java/text/Collator.html
答案 2 :(得分:1)
在比较器实现中使用apache-common StringUtils:
class StringCompare implements Comparator<String> {
public int compare(String s1, String s2){
return StringUtils.stripAccents(s1.toLowerCase()).compareTo(StringUtils.stripAccents(s2.toLowerCase()));
}
}