Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中字母数字数据(和特殊字符)不区分大小写的排序标准_Java_Sorting - Fatal编程技术网

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

Java中字母数字数据(和特殊字符)不区分大小写的排序标准,java,sorting,Java,Sorting,我有一个字符序列列表。我需要按照感觉自然的顺序对它们进行分类。我正在用Java编写代码。 我最初的想法是使用Collections.sort()。但我认为这种方法遵循ASCII顺序,即区分小写和大写文本。这不是一种自然的流动 为了定义“自然排序”,我快速搜索了一下,发现NISO TR03-1999标准似乎解决了这个问题 所以我想我需要一种使用该标准中定义的算法进行排序的方法。Java中有这样做的函数吗?还是我需要自己实施 这里有我忽略的东西吗 过去有没有人有过类似的问题?你是怎么处理的 下面是测

我有一个字符序列列表。我需要按照感觉自然的顺序对它们进行分类。我正在用Java编写代码。 我最初的想法是使用
Collections.sort()
。但我认为这种方法遵循ASCII顺序,即区分小写和大写文本。这不是一种自然的流动

为了定义“自然排序”,我快速搜索了一下,发现NISO TR03-1999标准似乎解决了这个问题

所以我想我需要一种使用该标准中定义的算法进行排序的方法。Java中有这样做的函数吗?还是我需要自己实施

这里有我忽略的东西吗

过去有没有人有过类似的问题?你是怎么处理的

下面是测试集合的代码示例。sort()

List List=new ArrayList();
列表。添加(“z”);
列表。添加(“a”);
列表。添加(“Z”);
列表。添加(“A”);
列表。添加(“z 1”);
列表。添加(“a 1”);
列表。添加(“Z 1”);
列表。添加(“A 1”);
列表。添加(“空格”);
列表。添加(“!”);
列表。添加(“.”);
列表。添加(“;”);
列表。添加(“\\”;
列表。添加(“/”);
列表。添加(“+”);
列表。添加(“1”);
列表。添加(“2”);
列表。添加(“10”);
列表。添加(“1abc”);
列表。添加(“2abc”);
列表。添加(“10abc”);
集合。排序(列表);
用于(字符串:列表)
System.out.println(字符串);

您可以创建自己的comparator类来比较和忽略大小写

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

在comparator实现中使用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()));
   }
}
类StringCompare实现了比较器{
公共整数比较(字符串s1、字符串s2){
返回StringUtils.stripAccents(s1.toLowerCase()).compareTo(StringUtils.stripAccents(s2.toLowerCase());
}
}

看一下拼贴器。这里是文档:

在Java8中,使用:Collections.sort(list,String::compareTignoreCase);这将解决区分大小写的问题,但不会解决其他问题,如重音(在带有重音的语言中)和一系列其他问题,除非我实现了一个巨大的解决方案……而且这个类是完全冗余的,因为这样的比较器已经存在:。
Collections.sort(list, new StringCompare());
class StringCompare implements Comparator<String> {               
    public int compare(String s1, String s2){
        return StringUtils.stripAccents(s1.toLowerCase()).compareTo(StringUtils.stripAccents(s2.toLowerCase()));
   }
}