一种排序方法和移动设备的制作方法

文档序号:6486256阅读:187来源:国知局
一种排序方法和移动设备的制作方法
【专利摘要】本发明的实施例提供一种排序方法和移动设备,涉及通信领域,能够符合不同国家用户的使用习惯。其方法为:将第一字符串的第i个字符的统一码值进行转义,将第二字符串的第i个字符的统一码值进行转义,转义后的码值包括所述第i个字符对应的基准字符的统一码值和所述第i个字符的统一码值与所述第i个字符对应的基准字符的统一码值的差值;当所述第一字符串的第i个字符的转义后的码值与所述第二字符串的第i个字符的转义后的码值不相等时,根据所述第一字符串的第i个字符的转义后的码值和所述第二字符串的第i个字符的转义后的码值的大小来排列所述第一字符串和所述第二字符串的顺序;否则,将i加1后再次执行上述步骤。本发明实施例用于字符串排序。
【专利说明】一种排序方法和移动设备
【技术领域】
[0001]本发明涉及计算机领域,尤其涉及一种排序方法和移动设备。
【背景技术】
[0002]目前对于字符串的排序有两种方法。第一种是使用Unicode(统一码)排序,即按照字符串中字符的Unicode值进行排序;第二种是对于不同的语言使用不同的字符集进行排序,比如:中文简体是将字符转化为GBK(Guo-Biac) KuoZhan,国家标准扩展码)编码,然后按照字符在GBK字符集中的值进行排序。
[0003]但是,对于多种语言混合的字符串,没有一种很好的解决办法。例如,在土耳其文和英文混编时,Unicode排序可以照顾到英文的排序,但是无法兼顾土耳其语。土耳其语是由字符A?Z以及土耳其的特色字母混编,在土耳其语中字符0应该在字符G之后的位置上,但是在和英文混编时,土耳其语中的字符0会放在字符Z之后。这样土耳其语用户在使用时就会有很多不便,例如,在电子词典中查询词汇时,0开头的单词常常位于Z开头的单词之后,而实际上,0开头的单词位于G开头的单词之后更为符合土耳其人的习惯。因此,现有的字符串排序方法无法兼顾除英语外其他语言的字符串排序,所以无法符合不同国家用户的使用习惯。

【发明内容】

[0004]本发明的实施例提供一种排序方法和移动设备,能够同时兼顾多种语言的字符串的排序,从而符合不同国家用户的使用习惯。
[0005]本发明的实施例采用如下技术方案:
[0006]一方面,提供一种排序方法,所述方法包括:
[0007]将第一字符串的第i个字符的统一码值进行转义,将第二字符串的第i个字符的统一码值进行转义,转义后的码值包括所述第i个字符对应的基准字符的统一码值和所述第i个字符的统一码值与所述第i个字符对应的基准字符的统一码值的差值;
[0008]将所述第一字符串的第i个字符的转义后的码值与所述第二字符串的第i个字符的转义后的码值进行比较;
[0009]当所述第一字符串的第i个字符的转义后的码值与所述第二字符串的第i个字符的转义后的码值不相等时,根据所述第一字符串的第i个字符的转义后的码值和所述第二字符串的第i个字符的转义后的码值的大小来排列所述第一字符串和所述第二字符串的顺序;
[0010]当所述第一字符串的第i个字符的转义后的码值与所述第二字符串的第i个字符的转义后的码值相等时,将所述第一字符串的第i+ι个字符的统一码值进行转义,将所述第二字符串的第i+ι个字符的统一码值进行转义,并将所述第一字符串的第i+ι个字符的转义后的码值与所述第二字符串的第i+ι个字符转义后的码值进行比较,直至排列出所述第一字符串和所述第二字符串的顺序;[0011]其中,i的初始值为I。
[0012]另一方面,提供一种移动设备,所述移动设备包括:
[0013]转义单元,用于将第一字符串的第i个字符的统一码值进行转义,将第二字符串的第i个字符的统一码值进行转义,转义后的码值包括所述第i个字符对应的基准字符的统一码值和所述第i个字符的统一码值与所述第i个字符对应的基准字符的统一码值的差值;
[0014]比较单元,用于将所述第一字符串的第i个字符的转义后的码值与所述第二字符串的第i个字符的转义后的码值进行比较;
[0015]排序单元,用于当所述第一字符串的第i个字符的转义后的码值与所述第二字符串的第i个字符的转义后的码值不相等时,根据所述第一字符串的第i个字符的转义后的码值和所述第二字符串的第i个字符的转义后的码值的大小来排列所述第一字符串和所述第二字符串的顺序;
[0016]所述转义单元还用于,当所述第一字符串的第i个字符的转义后的码值与所述第二字符串的第i个字符的转义后的码值相等时,将所述第一字符串的第i+ι个字符的统一码值进行转义,将所述第二字符串的第i+ι个字符的统一码值进行转义,以便所述比较单元将所述第一字符串的第i+ι个字符的转义后的码值与所述第二字符串的第i+ι个字符转义后的码值进行比较,直至所述排序单元排列出所述第一字符串和所述第二字符串的顺序;
[0017]其中,i的初始值为I。
[0018]本发明的实施例提供一种排序方法和移动设备,通过将字符串中字符的统一码值进行转义,并根据转义后的码值进行排序,能够同时兼顾多种语言的字符串的排序,从而符合不同国家用户的使用习惯。
【专利附图】

【附图说明】
[0019]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0020]图1为本发明实施例提供的一种排序方法的流程示意图;
[0021]图2为本发明另一实施例提供的一种排序方法的流程示意图;
[0022]图3为本发明实施例提供的一种移动设备的结构示意图;
[0023]图4为本发明实施例提供的另一种移动设备的结构示意图。
【具体实施方式】
[0024]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0025]本发明实施例提供一种排序方法,如图1所示包括:[0026]S101、将第一字符串的第i个字符的统一码值进行转义,将第二字符串的第i个字符的统一码值进行转义,转义后的码值包括第i个字符对应的基准字符的统一码值和第i个字符的统一码值与第i个字符对应的基准字符的统一码值的差值。
[0027]S102、将第一字符串的第i个字符的转义后的码值与第二字符串的第i个字符的转义后的码值进行比较。
[0028]S103、当第一字符串的第i个字符的转义后的码值与第二字符串的第i个字符的转义后的码值不相等时,根据第一字符串的第i个字符的转义后的码值和第二字符串的第i个字符的转义后的码值的大小来排列第一字符串和第二字符串的顺序。
[0029]S104、当第一字符串的第i个字符的转义后的码值与第二字符串的第i个字符的转义后的码值相等时,将第一字符串的第i+Ι个字符的统一码值进行转义,将第二字符串的第i+ι个字符的统一码值进行转义,并将第一字符串的第i+ι个字符的转义后的码值与第二字符串的第i+ι个字符转义后的码值进行比较,直至排列出第一字符串和第二字符串的顺序。
[0030]其中,i的初始值为I。
[0031]本发明的实施例提供一种排序方法,通过将字符串中字符的统一码值进行转义,并根据转义后的码值进行排序,能够同时兼顾多种语言的字符串的排序,从而符合不同国家用户的使用习惯。
[0032]本发明的另一实施例提供一种排序方法,如图2所示,包括:
[0033]S201、将第一字符串的第i个字符的Unicode (统一码)值进行转义,将第二字符串的第i个字符的Unicode值进行转义。
[0034]上述的第一字符串可以是一种语言或多种语言的字符串,第二字符串可以是一种语言或多种语言的字符串,例如第一字符串可以是一个英语单词,也可以是一个西班牙语单词或土耳其语单词,同样的第二字符串也可以是一个英语单词,还可以是一个西班牙语单词或土耳其语单词。无论第一字符串和第二字符串是哪国语言的字符串,进行字符串排序的方法完全相同。
[0035]需要说明的是:土耳其语共有29个字母,除了包括25个英文字母之外,还包括G、L 0和§,以下以0为例进行说明,西班牙语共有27个字母,除了包括26个英文字母外,还包括M睁此之外还包括重音标识字母人、6、?、0和?,以下以A为例进行说明。
[0036]在字符串中的每个字符都有一个Unicode值,例如大写的英文字母A的Unicode值为0x0041,西班牙语中的A的Unicode值为OxOOCl,大写的英文字母G的Unicode值为0x0047,土耳其语中的G的Unicode值为OxOllE,而大写英文字母Z的Unicode值为0x0060。而按照这种两字节的Unicode值来排列字符,字符人和0都会排列在字符Z之后,不符合西班牙用户和土耳其用户的使用习惯。
[0037]因此,为了符合所有用户的习惯,需要将字符人和字符A放在一起,将字符(5和G放
在一起。
[0038]故首先,需要将第一字符串与第二字符串的第i个字符进行转义处理,将两字节码值转义为三字节码值或者四字节码值。当然,i起始值为1,也就是要从第一字符串和第二字符串的的第I个字符开始转义。
[0039]以四字节码值为例,该四字节码值的前两字节为高位,后两字节为低位。其中,每个字符的四字节码值的高位为该字符对应的基准字符的Unicode值,四字节码值的低位为该字符的Unicode值和该字符对应的基准字符的Unicode值的差值。
[0040]其中,当字符为非英文字符时,该字符对应的基准字符为该字符对应的英文大写字母;当字符为英文小写字母时,该字符对应的基准字符为该字符对应的英文大写字母;当字符为英文大写字母时,该字符对应的基准字符为该字符自身;当字符为标点符号时,该字符对应的基准字符为该字符自身。
[0041]例如,字符人对应的基准字符为字符A,字符对应的基准字符为字符G,字符a对应的基准字符为字符A,而字符A对应的基准字符仍为字符A,字符“]”对应的基准字符仍为字符“]”。
[0042]而后,根据字符A与字符A的Unicode值就可以得到字符A与字符A的Unicode值的差值为0x0080,根据字符(5与字符G的Unicode值就可以得到字符6与字符G的Unicode值的差值为0x00D7,故字符A转义后的Unicode值就为0x0041 0x0080,字符<5转义后的Unicode值就为0x0047 0x00D7,而字符A转义后的Unicode值就为0x0041 0x0000,字符G转义后的Unicode值就为0x0047 0x0000。
[0043]S202、将第一字符串的第i个字符的转义后的码值与第二字符串的第i个字符的转义后的码值进行比较。
[0044]具体的,可以将第一字符串的第i个字符的转义后的码值减去第二字符串的第i个字符转义后的码值;
[0045]若第一字符串的第i个字符的转义后的码值减去第二字符串的第i个字符转义后的码值后所得的差值为正数,则判定第一字符串的第i个字符的转义后的码值大于第二字符串的第i个字符转义后的码值,此时执行步骤S203 ;
[0046]若第一字符串的第i个字符的转义后的码值减去第二字符串的第i个字符转义后的码值后所得的差值为负数,则判定第一字符串的第i个字符的转义后的码值小于第二字符串的第i个字符转义后的码值,此时执行步骤S203 ;
[0047]若第一字符串的第i个字符的转义后的码值减去第二字符串的第i个字符转义后的码值后所得的差值为零,则判定第一字符串的第i个字符的转义后的码值等于第二字符串的第i个字符转义后的码值,此时,将i加I后,再次执行步骤S201?步骤S202。
[0048]S203、根据第一字符串的第i个字符的转义后的码值和第二字符串的第i个字符的转义后的码值的大小来排列第一字符串和第二字符串的顺序。
[0049]具体的,当第一字符串的第i个字符的转义后的码值与第二字符串的第i个字符的转义后的码值不相等时,根据步骤S202比较出的第一字符串的第i个字符的转义后的码值和第二字符串的第i个字符的转义后的码值的大小来排列第一字符串和第二字符串的顺序。
[0050]若第一字符串的第i个字符的转义后的码值大于第二字符串的第i个字符转义后的码值,则将第一字符串排列在所述第二字符串之后;否则;
[0051]若第一字符串的第i个字符的转义后的码值小于第二字符串的第i个字符转义后的码值,则将第一字符串排列在第二字符串之前。
[0052]综上所述,对两个字符串进行排序,首先将第一字符串的第I个字符和将第二字符串的第I个字符进行转义,而后将第一字符串的第I个字符转义后的码值与第二字符串的第I个字符转义后的码值进行比较,若两个字符串的第I个字符转义后的码值不相等,则将第I个字符转义后的码值较小的那个字符串排列在前面;若两个字符串的第I个字符转义后的码值相等,则需要进入下一轮比较,即将第一字符串的第2个字符和将第二字符串的第2个字符进行转义,并将两个字符串的第2个字符的转以后的码值进行比较,并根据比较结果排列第一字符串和第二字符串,若两个字符串的第2个字符转义后的码值仍然相等,则需要将第一字符串的第3个字符和将第二字符串的第3个字符进行转义并进行比较,以此类推,直至排列出第一字符串和第二字符串的顺序为止。
[0053]例如,假设第一字符串为西班牙语单词人gata (玛瑙),第二字符串为西班牙语单词Aceptar (采纳),首先将由第一字符串和第二字符串的第I个符进行转义,也就是将字符人和字符A进行转义。由步骤S201可知,字符人转义后的Unicode值就为0x0041 0x0080,字符 A 转义后的 Unicode 值就为 0x0041 0x0000,用 0x0041 0x0080 减去 0x0041 0x0000 为正数,因此人转义后的Unicode值大于A转义后的Unicode值,故将第一字符串Agata排列在第二字符串Ac印tar之后。
[0054]再假设第一字符串为西班牙语单词Agata,而第二字符串为西班牙语单词Bodega(酒店),字符B转义后的Unicode值就为0x00420x0000,用0x0041 0x0080减去0x0042 0x0000为负数,故字符人转义后的Unicode值小于字符B转义后的Unicode值,故将第一字符串为Agata排列在第二字符串Bodega之前,也就是说Agata排列在Ac印tar之后,Bodega之前,可见,采用上述方法排列后的结果相对于现有技术中A开头的字符排在Z开头的单词之后更符合西班牙语用户的习惯。
[0055]又例如,不同语种字符串的比较,假设第一字符串为西班牙语单词Ac印tar,第二字符串为英文单词Accept (接受),由于第一字符串和第二字符串的第I个字符为A,转义后的Unicode值都为0x00410x0000,故比较第I个字符无法排列第一字符串和第二字符串,第一字符串和第二字符串的第2个字符为C,转义后的Unicode值都为0x0043 0x0020,故比较第2个字符也无法排列第一字符串和第二字符串,所以还需继续比较,第一字符串的第3个字符为e,转义后的Unicode值为0x0045 0x0020,第二字符串第3个字符C,转义后的 Unicode 值都为 0x0043 0x0020,用 0x0045 0x0020 减去 0x0043 0x0020 为正数,故将第一字符串Aceptar排列在第二字符串Accept之后。
[0056]采用上述方法两两比较,用户终端就可以将混编字符库中的所有字符串进行排序,例如采用上述方法可以将混编语言的字母顺序或者单词顺序进行重新排列。
[0057]示例性的,如表I所示为英语、西班牙语以及土耳其语的大小写字母以及标点符号的重新排序结果。
[0058]表I
【权利要求】
1.一种排序方法,其特征在于,所述方法包括: 将第一字符串的第i个字符的统一码值进行转义,将第二字符串的第i个字符的统一码值进行转义,转义后的码值包括所述第i个字符对应的基准字符的统一码值和所述第i个字符的统一码值与所述第i个字符对应的基准字符的统一码值的差值; 将所述第一字符串的第i个字符的转义后的码值与所述第二字符串的第i个字符的转义后的码值进行比较; 当所述第一字符串的第i个字符的转义后的码值与所述第二字符串的第i个字符的转义后的码值不相等时,根据所述第一字符串的第i个字符的转义后的码值和所述第二字符串的第i个字符的转义后的码值的大小来排列所述第一字符串和所述第二字符串的顺序; 当所述第一字符串的第i个字符的转义后的码值与所述第二字符串的第i个字符的转义后的码值相等时,将所述第一字符串的第i+ι个字符的统一码值进行转义,将所述第二字符串的第i+ι个字符的统一码值进行转义,并将所述第一字符串的第i+ι个字符的转义后的码值与所述第二字符串的第i+ι个字符转义后的码值进行比较,直至排列出所述第一字符串和所述第二字符串的顺序; 其中,i的初始值为I。
2.根据权利要求1所述的方法,其特征在于,所述将第一字符串的第i个字符的统一码值进行转义,将第二字符串的第i个字符的统一码值进行转义包括: 将所述第一字符串的第i个字符的统一码值由两字节码值转义为三字节码值或四字节码值; 将所述第二字符串的第i个字符 的统一码值由两字节码值转义为三字节码值或四字节码值; 其中,所述三字节码值或者所述四字节码值的高位为所述第i个字符对应的基准字符的统一码值;所述三字节码值或者所述四字节码值的低位为所述第i个字符的统一码值与所述第i个字符对应的基准字符的统一码值的差值。
3.根据权利要求1或2所述的方法,其特征在于,所述将所述第一字符串的第i个字符的转义后的码值与所述第二字符串的第i个字符的转义后的码值进行比较包括: 将所述第一字符串的第i个字符的转义后的码值减去所述第二字符串的第i个字符转义后的码值; 若所述第一字符串的第i个字符的转义后的码值减去所述第二字符串的第i个字符转义后的码值后所得的差值为正数,则判定所述第一字符串的第i个字符的转义后的码值大于所述第二字符串的第i个字符转义后的码值; 若所述第一字符串的第i个字符的转义后的码值减去所述第二字符串的第i个字符转义后的码值后所得的差值为负数,则判定所述第一字符串的第i个字符的转义后的码值小于所述第二字符串的第i个字符转义后的码值; 若所述第一字符串的第i个字符的转义后的码值减去所述第二字符串的第i个字符转义后的码值后所得的差值为零,则判定所述第一字符串的第i个字符的转义后的码值等于所述第二字符串的第i个字符转义后的码值。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述当所述第一字符串的第i个字符的转义后的码值与所述第 二字符串的第i个字符的转义后的码值不相等时,根据所述第一字符串的第i个字符的转义后的码值和所述第二字符串的第i个字符的转义后的码值的大小来排列所述第一字符串和所述第二字符串的顺序包括: 若所述第一字符串的第i个字符的转义后的码值大于所述第二字符串的第i个字符转义后的码值,则将所述第一字符串排列在所述第二字符串之后; 若所述第一字符串的第i个字符的转义后的码值小于所述第二字符串的第i个字符转义后的码值,则将所述第一字符串排列在所述第二字符串之前。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述第i个字符对应的基准字符包括: 当所述第i个字符为非英文字符时,所述第i个字符对应的基准字符为所述字符对应的英文大写字母;或 当所述第i个字符为英文小写字母时,所述第i个字符对应的基准字符为所述字符对应的英文大写字母;或 当所述第i个字符为英文大写字母时,所述第i个字符对应的基准字符为所述第i个字符自身;或 当所述第i个字符为标点符号时,所述第i个字符对应的基准字符为所述第i个字符自身。
6.一种移动设备,其特征在于,所述移动设备包括: 转义单元,用于将第一字符串的第i个字符的统一码值进行转义,将第二字符串的第i个字符的统一码值进行转义,转义后的码值包括所述第i个字符对应的基准字符的统一码值和所述第i个字符的统一码值与所述第i个字符对应的基准字符的统一码值的差值;比较单元,用于将所述第一字符串的第i个字符的转义后的码值与所述第二字符串的第i个字符的转义后的码值进行比较; 排序单元,用于当所述第一字符串的第i个字符的转义后的码值与所述第二字符串的第i个字符的转义后的码值不相等时,根据所述第一字符串的第i个字符的转义后的码值和所述第二字符串的第i个字符的转义后的码值的大小来排列所述第一字符串和所述第二字符串的顺序; 所述转义单元还用于,当所述第一字符串的第i个字符的转义后的码值与所述第二字符串的第i个字符的转义后的码值相等时,将所述第一字符串的第i+Ι个字符的统一码值进行转义,将所述第二字符串的第i+Ι个字符的统一码值进行转义,以便所述比较单元将所述第一字符串的第i+ι个字符的转义后的码值与所述第二字符串的第i+ι个字符转义后的码值进行比较,直至所述排序单元排列出所述第一字符串和所述第二字符串的顺序;其中,i的初始值为I。
7.根据权利要求7所述的移动设备,其特征在于,所述转义单元具体用于: 将第一字符串的第i个字符的统一码值由两字节码值转义为三字节码值或四字节码值; 将第二字符串的第i个字符的统一码值由两字节码值转义为三字节码值或四字节码值; 其中,所述三字节码值或者所述四字节码值的高位为所述第i个字符对应的基准字符的统一码值;所述三字节码值或者四字节码值的低位为所述第i个字符的统一码值与所述第i个字符对应的基准字符的统一码值的差值。
8.根据权利要求6或7所述的移动设备,其特征在于,所述比较单元至少包括以下任一种单元: 计算单元,用于将所述第一字符串的第i个字符的转义后的码值减去所述第二字符串的第i个字符转义后的码值; 判定单元,用于若所述第一字符串的第i个字符的转义后的码值减去所述第二字符串的第i个字符转义后的码值后所得的差值为正数,则判定所述第一字符串的第i个字符的转义后的码值大于所述第二字符串的第i个字符转义后的码值;若所述第一字符串的第i个字符的转义后的码值减去所述第二字符串的第i个字符转义后的码值后所得的差值为负数,则判定所述第一字符串的第i个字符的转义后的码值小于所述第二字符串的第i个字符转义后的码值;若所述第一字符串的第i个字符的转义后的码值减去所述第二字符串的第i个字符转义后的码值后所得的差值为零,则判定所述第一字符串的第i个字符的转义后的码值等于所述第二字符串的第i个字符转义后的码值。
9.根据权利要求6至8 任一项所述的移动设备,其特征在于,所述排序单元具体用于: 若所述第一字符串的第i个字符的转义后的码值大于所述第二字符串的第i个字符转义后的码值,则将所述第一字符串排列在所述第二字符串之后; 若所述第一字符串的第i个字符的转义后的码值小于所述第二字符串的第i个字符转义后的码值,则将所述第一字符串排列在所述第二字符串之前。
10.根据权利要求6至9任一项所述的移动设备,其特征在于,所述第i个字符对应的基准字符包括: 当所述第i个字符为非英文字符时,所述第i个字符对应的基准字符为所述字符对应的英文大写字母;或 当所述第i个字符为英文小写字母时,所述第i个字符对应的基准字符为所述字符对应的英文大写字母;或 当所述第i个字符为英文大写字母时,所述第i个字符对应的基准字符为所述第i个字符自身;或 当所述第i个字符为标点符号时,所述第i个字符对应的基准字符为所述第i个字符自身。
【文档编号】G06F17/30GK103514160SQ201210199405
【公开日】2014年1月15日 申请日期:2012年6月15日 优先权日:2012年6月15日
【发明者】曹庆峰 申请人:华为终端有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1