2014-09-19 89 views
1

我需要对包含数字的字符串集进行排序。 Ex: [15, 13, 14, 11, 12, 3, 2, 1, 10, 7, 6, 5, 4, 9, 8]。我需要将它分类到[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]。但是当我使用keyList设置的Collections.sort(keyList);时,我得到的reult是[1, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8, 9]。请帮忙。在java中对字符串数组进行排序

+2

字符串比较是按字母顺序排列的。尝试将其转换为整数列表以获得所需的结果。 – blackSmith 2014-09-19 12:28:30

+0

请发布您使用的实际代码。 – wei2912 2014-09-19 12:28:43

+2

Collections.sort接受一个Comparator作为参数。这使您可以自己定义比较功能。 (实际上,修改为int,然后比较值) – Ronald 2014-09-19 12:30:51

回答

0

可以尝试用:

final int[] searchList = 
     new int[] { 15, 13, 14, 11, 12, 3, 2, 1, 10, 7, 6, 5, 4, 9, 8 }; 
Arrays.sort(searchList); 

结果是:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 

名单必须int

2

编写自定义比较和分析它作为参数传递给Collections.sort(Collection,Comparator)。一种解决方案是将你的字符串解析为整数。

Collections.sort(keyList, new Comparator<String>() 
    { 
     @Override 
     public int compare(String s1, String s2) 
     { 
      Integer val1 = Integer.parseInt(s1); 
      Integer val2 = Integer.parseInt(s2); 
      return val1.compareTo(val2); 
     } 
    }); 
+4

请使用泛型。已经推出10年了... – Natix 2014-09-19 12:40:57

+0

哎呀! Forgott它:/ – kai 2014-09-19 13:17:28

0

改造String s转换Integer第一。

List<Integer> ints = new ArrayList<>(); 
for (String s : strings) 
    ints.add(Integer.parseInt(s)); 
Collections.sort(ints); 

如果您不需要重复值,可以使用SortedSet,它保持自动顺序:

SortedSet<Integer> ints = new TreeSet<>(); 
for (String s : strings) 
    ints.add(Integer.parseInt(s)); 
// all done! 
0

你的字符串将在自然顺序进行排序为字符串,而不是作为数字。因此,在"10"之后出现"11""2"出现在"11111111110"之后。

该怎么办?

使用Integer.parseInt()来解析集合中的每个字符串值为整数,然后将它们添加到集合中并调用Collections.sort()

0

你可以做的是凯表示,并转换您的字符串为整数,并比较其

,但它是昂贵的操作,我的建议是这样的:

keyList.sort(new Comparator<String>() { 

     @Override 
     public int compare(String o1, String o2) { 
      if (o1.length() == o2.length()){ 
       return o1.compareTo(o2); 
      } 
      return o1.length() - o2.length(); 
     } 
    }); 

,如果你的号码有相同的长度,然后使用String.compareTo进行比较,否则按顺序对它们进行排序,因此1 2 3将自动在11之前22等。

相关问题