62,623
社区成员
发帖
与我相关
我的任务
分享import java.util.Comparator;
public class MyComparator implements Comparator {
public int compare(Object o1, Object o2) {
o1 = o1.toString().replaceAll("^([_+0]+)", "");
o2 = o2.toString().replaceAll("^([_+0]+)", "");
String[] s1 = o1.toString().split("[_+]");
String[] s2 = o2.toString().split("[_+]");
if(!s1[0].equals(s2[0]))
return Integer.parseInt(s1[0])-Integer.parseInt(s2[0]);
else if(s1.length != s2.length)
return s1.length-s2.length;
else
return Integer.parseInt(s1[s1.length-1])-Integer.parseInt(s2[s2.length-1]);
}
}
import java.util.Comparator;
public class MyComparator implements Comparator {
public int compare(Object o1, Object o2) {
return toInt(o1) - toInt(o2);
}
public boolean equals(Object obj) {
return true;// 不必实现
}
public static int toInt(Object o) {
String str = (String) o;
// 消除特殊字符
str = str.replaceAll("_", "");// _
str = str.replaceAll("[+]", "");// +
// 最后再消除前面的0
while ("0".equals(str.substring(0, 1))) {
str = str.substring(1);
}
return Integer.parseInt(str);
}
}
import java.util.Arrays;
public class MyComparatorTest {
public static void main(String[] args) {
String[] source = new String[] { "2", "30", "012", "_0400", "+016_1", "2+5" };
String[] result = new String[source.length];
System.arraycopy(source, 0, result, 0, source.length);
//排序
Arrays.sort(result, new MyComparator());
//结果
for (int i = 0; i < source.length; i++) {
System.out.println(MyComparator.toInt(result[i]) + " " + result[i]
+ " " + source[i]);
}
}
}
function mysort(){
var src = new Array('1','15_6','2','012','15_3','3','04','16_1','15+6','18_2');
alert("排序前数组[" + src.toString()+"];");
var dest = src.sort(
function st(a,b){
if (a == b){
return 0;
}
var _a = parseInt(a);
var _b = parseInt(b);
if (_a == _b){
var _tA = a.replace('_','-');
var _tB = b.replace('_','-');
var _tmpA = _tA.substr(_a.toString().length);
if (_tmpA == null || _tmpA == ''){
_tmpA = '0';
}
var _tmpB = _tB.substr(_b.toString().length);
if (_tmpB == null || _tmpB == ''){
_tmpB = '0';
}
return parseInt(_tmpA)-parseInt(_tmpB);
}else{
return _a-_b;
}
}
);
alert("排序后数组[" + dest.toString()+"];");
}
function mysort(){
var src = new Array('1','2','012','3','04','16_1','18_2');
alert("排序前数组[" + src.toString()+"];");
var dest = src.sort(
function st(a,b){
return parseInt(a)-parseInt(b);
}
);
alert("排序后数组[" + dest.toString()+"];");
}