JAVA或JAVA SCRIPT或Idoc SCRIPT按字母排序

时间:2010-05-14 12:21:20

标签: java javascript sorting alphabetical idoc

我有以下任务:

类别中的所有项目都应按字母顺序排序,但示例除外。字母前应显示特殊字符和数字。

我遇到了一个问题。大多数标准排序函数和插件都使用ASCII表。在此表中,以下符号:〜,},{等的索引多于字母,例如: 排序的实际结果是:

1 - #1 A T
2 - A T
3 - {C T

我需要得到:

1 - #1 A T
2 - {C T
3 - A T 

请尽快给我你的建议或任何例子。

最诚挚的问候。

2 个答案:

答案 0 :(得分:0)

“缺少时间”解决方案:在3个数组或列表中删除数据:特殊字符,数字,字符。 (测试是否为数字或在'a'和'Z'之间)。用f.e.对它们进行排序。 Java中的Collections.sort或Arrays.sort将对每个集合或数组进行排序,然后将它们附加在一起,但不再进行任何排序。我没有对此进行过测试,但看起来它可能会起作用

答案 1 :(得分:0)

这有点单调乏味,主要是为了在'2'之前保持'100'排序。

您可以将字符串拆分为单个字符和数字组。

对任何数字组进行排序,如数字,并按字符代码对其他所有数字进行排序, 在为任何a-z字符添加一些'权重'之后。

Array.prototype.a1Sort= function(){
    var a1, b1, rx=/(\d+)|(\D)/g, rd=/\d+/;
    return this.sort(function(a, b){
        a= a.toLowerCase().match(rx);
        b= b.toLowerCase().match(rx);
        while(a.length && b.length){
            a1= a.shift();
            b1= b.shift();
            if(rd.test(a1) || rd.test(b1)){
                if(!rd.test(a1)) return 1;
                if(!rd.test(b1)) return -1;
                if(a1!= b1) return a1-b1;
            }
            else{
                a1= a1.charCodeAt(0);
                b1= b1.charCodeAt(0);
                if(a1> 96 && a1<123) a1+= 1000;
                if(b1> 96 && b1<123) b1+= 1000;
                if(a1!= b1) return a1= b1;
            }
        }
        return a.length-b.length;
    });
}


var s1=['#1 A T','A T','{C T'];

alert(s1.customSort())

/*  returned value: (Array)
#1 A T,{C T,A T
*/