使用字母数字数据(和特殊字符)对标准进行排序,并在Java中使用大小写不敏感

时间:2015-07-21 20:39:05

标签: java sorting

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

3 个答案:

答案 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)

答案 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()));
   }
}