有没有办法以数字方式对矢量进行排序?(我想在第一个之前对数字进行排序;(分号)
我需要让我们说这个(它是一个带有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。
答案 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 类中执行此操作,您就拥有了比较机制。