Sort on a string that may contain a number

前端 未结 23 2500
走了就别回头了
走了就别回头了 2020-11-22 02:59

I need to write a Java Comparator class that compares Strings, however with one twist. If the two strings it is comparing are the same at the beginning and end of the strin

23条回答
  •  天命终不由人
    2020-11-22 03:44

    I had a similar problem where my strings had space-separated segments inside. I solved it in this way:

    public class StringWithNumberComparator implements Comparator {
    
    @Override
    public int compare(MyClass o1, MyClass o2) {
        if (o1.getStringToCompare().equals(o2.getStringToCompare())) {
            return 0;
        }
        String[] first = o1.getStringToCompare().split(" ");
        String[] second = o2.getStringToCompare().split(" ");
        if (first.length == second.length) {
            for (int i = 0; i < first.length; i++) {
    
                int segmentCompare = StringUtils.compare(first[i], second[i]);
                if (StringUtils.isNumeric(first[i]) && StringUtils.isNumeric(second[i])) {
    
                    segmentCompare = NumberUtils.compare(Integer.valueOf(first[i]), Integer.valueOf(second[i]));
                    if (0 != segmentCompare) {
                        // return only if uneven numbers in case there are more segments to be checked
                        return segmentCompare;
                    }
                }
                if (0 != segmentCompare) {
                    return segmentCompare;
                }
            }
        } else {
            return StringUtils.compare(o1.getDenominazione(), o2.getDenominazione());
        }
    
        return 0;
    }
    

    As you can see I have used Apaches StringUtils.compare() and NumberUtils.compere() as a standard help.

提交回复
热议问题