2011-03-23 119 views
2

我有3个值一样如何使用java基于字母数字值进行排序?

a^100,b^200,c^150 

我需要这些值的

b^200,c^150,a^100 

顺序我怎样才能在Java中做这样?

+0

从你的例子,我不明白这些值的意思排序。你能描述一下排序规则吗? – sleske 2011-03-23 09:51:33

+0

您是在问如何使用Java或用于比较“a^100”和“b^200”的算法进行排序? – RonK 2011-03-23 09:52:53

+0

在^ like 100,200,150.com之后得到整数,然后对结果进行排序并给出200,150,100。 – Marshal 2011-03-23 09:54:54

回答

3

使用自定义Comparator,像这样的:

public class IntegerSubstringCompare implements Comparator<String> { 
    @Override 
    public int compare(String left, String right) { 
     Integer leftInt = Integer.parseInt(left.substring(left.indexOf("^") + 1)); 
     Integer rightInt = Integer.parseInt(right.substring(right.indexOf("^") + 1)); 

     return -1 * leftInt.compareTo(rightInt); 
    } 
} 

您可以使用它像这样:

public static void main(String[] args) { 
    String[] input = {"a^100", "b^200", "c^150"}; 
    List<String> inputList = Arrays.asList(input); 
    Collections.sort(inputList, new IntegerSubstringCompare()); 
    System.out.println(inputList); 
} 
+0

谢谢aroth..Its工作正常.. – Marshal 2011-03-23 10:09:18

0
String sample = "a^100,b^200,c^150"; 
List data = Arrays.asList(sample.split(",")); 
Collections.sort(data, Collections.reverseOrder(new Comparator<String>() { 
public int compare (String obj1,String obj2) 
{ 
    String num1 = obj1.split("\\^")[1]; 
    String num2 = obj2.split("\\^")[1]; 
    return num1.compareTo(num2); 
} 
})); 
String sortedSample[]= (String[])data.toArray(new String[data.size()]); 
for (int z=0; z< sortedSample.length;z++) 
System.out.println(sortedSample[z]); 
相关问题