以数字方式对向量的组件进行排序,其中包含字母数字和字母

时间:2013-05-08 07:44:03

标签: java sorting vector

有没有办法以数字方式对矢量进行排序?(我想在第一个之前对数字进行排序;(分号)

我需要让我们说这个(它是一个带有4个字符串/组件的向量)

[
 7394;dasd;dasda;dasda;5;3  

 2222;dasdasd;das;true;7;4;dsda;60  

 6660;dsada;dasasd;true;6;3 

 2345;dasdsagfd;das;true;7;4;gfgfdgd;60
]

成为这个

[
 2222;dasdasd;das;true;7;4;dsda;60

 2345;dasdsagfd;das;true;7;4;gfgfdgd;60  

 6660;dsada;dasasd;true;6;3  

 7394;dasd;dasda;dasda;5;3
]

或此[3123;dasdas;31;31 1115;das;31;312 4412;sdf;31;42]

[1115;das;31;312 3123;dasdas;31;31 4412;sdf;31;42] (我在数字上排序3123,1115和4412,但我仍然保留了以后的东西)

我曾想过将每个组件转换为字符串然后执行以下操作:

int count;
for(int i=0;i<string_component1.length();i++){
    if(Character.isDigit(string_component1.charAt(i)){
    count = i;
    break;
   }
}

然后使用substring我将采取我想要的部分,将它放在一个字符串,将其转换为int,然后我将采取第一个(最低),使用vector contains 来查找其中的组件在其中并将此组件放在第一个位置的新向量上。等等与其他组件

但是我觉得它的代码太多而且没有用,因为矢量大小可能是3或50。

4 个答案:

答案 0 :(得分:2)

  

有没有办法以数字方式对矢量进行排序?(我想在第一个之前对数字进行排序;(分号))

java.util.Vector进行排序的一般模式是实现Comparator并将其传递给Collections.sort()方法。然后,可以将排序顺序的所有逻辑放入Comparator的{​​{3}}方法中。在您的情况下,它可能如下所示:

public static void main(String[] args) {
  String[] input = {"7394;dasd;dasda;dasda;5;3", "2222;dasdasd;das;true;7;4;dsda;60",
                    "6660;dsada;dasasd;true;6;3", "2345;dasdsagfd;das;true;7;4;gfgfdgd;60"};
  Vector<String> vec = new Vector<>();
  vec.addAll(Arrays.asList(input));
  System.out.println("Input : " + vec);

  Collections.sort(vec, new Comparator<String>() {

     @Override
     public int compare(String o1, String o2) {
        int i1 = Integer.valueOf(o1.split(";")[0]);
        int i2 = Integer.valueOf(o2.split(";")[0]);

        return i1 - i2;
     }
  } );

  System.out.println("Result: " + vec);      
}

输出:

Input : [7394;dasd;dasda;dasda;5;3, 2222;dasdasd;das;true;7;4;dsda;60, 6660;dsada;dasasd;true;6;3, 2345;dasdsagfd;das;true;7;4;gfgfdgd;60]
Result: [2222;dasdasd;das;true;7;4;dsda;60, 2345;dasdsagfd;das;true;7;4;gfgfdgd;60, 6660;dsada;dasasd;true;6;3, 7394;dasd;dasda;dasda;5;3]

答案 1 :(得分:1)

这是使用Collections.sort()和Comparator进行的优雅方式:

Vector<String> vector;

Collections.sort(vector, new Comparator<String>() {
  public int compare(String s1, String s2) {
    return getInt(s1) - getInt(s2);
  }
  int getInt(String s) {
    return Integer.parseInt(s.replaceAll("(\\d+).*", "$1"));
  }
});

答案 2 :(得分:0)

我无法理解您的排序顺序,但您可以使用Collection.sort()

对集合进行排序

您可以使用Collection.sort()对列表进行排序,并实现自定义Comparator,以便按照您的需要订购元素。

答案 3 :(得分:0)

如果字符串有修复模式,您可以执行以下操作:

int indexOfSemi = string_component.indexOf(";")

有了这个你有第一个分号。 然后用:

String myNumber = string_component.substring(0,indexOfSemi-1)

现在你有了你必须转换为int的号码。 在 Comparator 类中执行此操作,您就拥有了比较机制。