0

有没有办法对向量进行数字排序?(我想对第一个数字之前的数字进行排序;(分号)

我需要这样说(它是一个带有 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;
   }
}

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

但我认为它的代码太多了,而且它不起作用,因为矢量大小可以是 3 或 50。

4

4 回答 4

2

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

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

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]
于 2013-05-08T08:01:12.700 回答
1

这是使用带有 Comparator 的 Collections.sort() 的优雅方式:

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"));
  }
});
于 2013-05-08T08:19:22.733 回答
0

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

int indexOfSemi = string_component.indexOf(";")

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

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

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

于 2013-05-08T07:55:08.640 回答
0

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

您可以使用Collection.sort()对列表进行排序并实现自定义 Comparator 以按照您想要的方式对元素进行排序。

于 2013-05-08T07:49:49.823 回答