0

我正在尝试读取文件并比较字符串长度。如果两个字符串的长度相同,那么我想按自然排序顺序(按字母顺序)对它们进行排序。

这是我正在研究的比较器的一个片段。减去排序相同长度的字符串后,一切都完成了。

    Collections.sort(s, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return o1.length() - o2.length();
        }
    }); 

感谢您的任何意见或建议

4

2 回答 2

7

只需在您的比较方法中放置一个 if else 块。

伪代码:

if lengths are not equal 
   return o1's length compared to o2's length.
else 
   return o1 compared to o2.

我认为你可以弄清楚其余的。

于 2013-09-22T22:57:50.307 回答
1

因此,就实际代码而言,它将类似于:

    Collections.sort(strList, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            int returnVal = 0;

            //handle nulls, there's some sample logic:
            if(o1 == null && o2 == null){
                returnVal = 0;
            } else
            if(o1 == null && o2 != null){
                returnVal = 1;
            } else
            if(o1 != null && o2 == null){
                returnVal = -1;
            } else {

                //sort by length
                returnVal = ((Integer)o1.length()).compareTo((Integer)o2.length());
                //if equal length, sort by string
                if(returnVal == 0){
                    returnVal = o1.compareTo(o2);
                }

            }
            return returnVal;
        }
    });

我还为空检查添加了逻辑,并将它们移动到排序列表的末尾。可能有不同的实用程序已经这样做了,你可以调用它。

另请注意,如果您希望字符串比较忽略大小写,请改用 String.compareToIgnoreCase() 方法。

于 2013-09-22T23:43:39.800 回答