Java中不区分大小写的字母数字数据(和特殊字符)排序标准



我有一个字符序列列表。我需要把它们按感觉自然的顺序排序。我在用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);

看一下排序器。这里的文档:https://docs.oracle.com/javase/8/docs/api/java/text/Collator.html

您可以创建自己的比较器类来比较并忽略大小写。

static class StringCompare implements Comparator<String> {               
  public int compare(String s1, String s2){
        return s1.toLowerCase().compareTo(s2.toLowerCase());
  }
}

然后用这个排序:

Collections.sort(list, new StringCompare());

在比较器实现中使用apache通用的StringUtils:

class StringCompare implements Comparator<String> {               
    public int compare(String s1, String s2){
        return StringUtils.stripAccents(s1.toLowerCase()).compareTo(StringUtils.stripAccents(s2.toLowerCase()));
   }
}

最新更新