具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种排序方法,如图1所示包括:
S101、将第一字符串的第i个字符的统一码值进行转义,将第二字符串的第i个字符的统一码值进行转义,转义后的码值包括第i个字符对应的基准字符的统一码值和第i个字符的统一码值与第i个字符对应的基准字符的统一码值的差值。
S102、将第一字符串的第i个字符的转义后的码值与第二字符串的第i个字符的转义后的码值进行比较。
S103、当第一字符串的第i个字符的转义后的码值与第二字符串的第i个字符的转义后的码值不相等时,根据第一字符串的第i个字符的转义后的码值和第二字符串的第i个字符的转义后的码值的大小来排列第一字符串和第二字符串的顺序。
S104、当第一字符串的第i个字符的转义后的码值与第二字符串的第i个字符的转义后的码值相等时,将第一字符串的第i+1个字符的统一码值进行转义,将第二字符串的第i+1个字符的统一码值进行转义,并将第一字符串的第i+1个字符的转义后的码值与第二字符串的第i+1个字符转义后的码值进行比较,直至排列出第一字符串和第二字符串的顺序。
其中,i的初始值为1。
本发明的实施例提供一种排序方法,通过将字符串中字符的统一码值进行转义,并根据转义后的码值进行排序,能够同时兼顾多种语言的字符串的排序,从而符合不同国家用户的使用习惯。
本发明的另一实施例提供一种排序方法,如图2所示,包括:
S201、将第一字符串的第i个字符的Unicode(统一码)值进行转义,将第二字符串的第i个字符的Unicode值进行转义。
上述的第一字符串可以是一种语言或多种语言的字符串,第二字符串可以是一种语言或多种语言的字符串,例如第一字符串可以是一个英语单词,也可以是一个西班牙语单词或土耳其语单词,同样的第二字符串也可以是一个英语单词,还可以是一个西班牙语单词或土耳其语单词。无论第一字符串和第二字符串是哪国语言的字符串,进行字符串排序的方法完全相同。
需要说明的是:土耳其语共有29个字母,除了包括25个英文字母之外,还包括和以下以为例进行说明,西班牙语共有27个字母,除了包括26个英文字母外,还包括除此之外还包括重音标识字母和以下以为例进行说明。
在字符串中的每个字符都有一个Unicode值,例如大写的英文字母A的Unicode值为0x0041,西班牙语中的的Unicode值为0x00C1,大写的英文字母G的Unicode值为0x0047,土耳其语中的的Unicode值为0x011E,而大写英文字母Z的Unicode值为0x0060。而按照这种两字节的Unicode值来排列字符,字符和都会排列在字符Z之后,不符合西班牙用户和土耳其用户的使用习惯。
因此,为了符合所有用户的习惯,需要将字符和字符A放在一起,将字符和G放在一起。
故首先,需要将第一字符串与第二字符串的第i个字符进行转义处理,将两字节码值转义为三字节码值或者四字节码值。当然,i起始值为1,也就是要从第一字符串和第二字符串的的第1个字符开始转义。
以四字节码值为例,该四字节码值的前两字节为高位,后两字节为低位。其中,每个字符的四字节码值的高位为该字符对应的基准字符的Unicode值,四字节码值的低位为该字符的Unicode值和该字符对应的基准字符的Unicode值的差值。
其中,当字符为非英文字符时,该字符对应的基准字符为该字符对应的英文大写字母;当字符为英文小写字母时,该字符对应的基准字符为该字符对应的英文大写字母;当字符为英文大写字母时,该字符对应的基准字符为该字符自身;当字符为标点符号时,该字符对应的基准字符为该字符自身。
例如,字符对应的基准字符为字符A,字符对应的基准字符为字符G,字符a对应的基准字符为字符A,而字符A对应的基准字符仍为字符A,字符“]”对应的基准字符仍为字符“]”。
而后,根据字符与字符A的Unicode值就可以得到字符与字符A的Unicode值的差值为0x0080,根据字符与字符G的Unicode值就可以得到字符与字符G的Unicode值的差值为0x00D7,故字符转义后的Unicode值就为0x0041 0x0080,字符转义后的Unicode值就为0x0047 0x00D7,而字符A转义后的Unicode值就为0x0041 0x0000,字符G转义后的Unicode值就为0x0047 0x0000。
S202、将第一字符串的第i个字符的转义后的码值与第二字符串的第i个字符的转义后的码值进行比较。
具体的,可以将第一字符串的第i个字符的转义后的码值减去第二字符串的第i个字符转义后的码值;
若第一字符串的第i个字符的转义后的码值减去第二字符串的第i个字符转义后的码值后所得的差值为正数,则判定第一字符串的第i个字符的转义后的码值大于第二字符串的第i个字符转义后的码值,此时执行步骤S203;
若第一字符串的第i个字符的转义后的码值减去第二字符串的第i个字符转义后的码值后所得的差值为负数,则判定第一字符串的第i个字符的转义后的码值小于第二字符串的第i个字符转义后的码值,此时执行步骤S203;
若第一字符串的第i个字符的转义后的码值减去第二字符串的第i个字符转义后的码值后所得的差值为零,则判定第一字符串的第i个字符的转义后的码值等于第二字符串的第i个字符转义后的码值,此时,将i加1后,再次执行步骤S201~步骤S202。
S203、根据第一字符串的第i个字符的转义后的码值和第二字符串的第i个字符的转义后的码值的大小来排列第一字符串和第二字符串的顺序。
具体的,当第一字符串的第i个字符的转义后的码值与第二字符串的第i个字符的转义后的码值不相等时,根据步骤S202比较出的第一字符串的第i个字符的转义后的码值和第二字符串的第i个字符的转义后的码值的大小来排列第一字符串和第二字符串的顺序。
若第一字符串的第i个字符的转义后的码值大于第二字符串的第i个字符转义后的码值,则将第一字符串排列在所述第二字符串之后;否则;
若第一字符串的第i个字符的转义后的码值小于第二字符串的第i个字符转义后的码值,则将第一字符串排列在第二字符串之前。
综上所述,对两个字符串进行排序,首先将第一字符串的第1个字符和将第二字符串的第1个字符进行转义,而后将第一字符串的第1个字符转义后的码值与第二字符串的第1个字符转义后的码值进行比较,若两个字符串的第1个字符转义后的码值不相等,则将第1个字符转义后的码值较小的那个字符串排列在前面;若两个字符串的第1个字符转义后的码值相等,则需要进入下一轮比较,即将第一字符串的第2个字符和将第二字符串的第2个字符进行转义,并将两个字符串的第2个字符的转以后的码值进行比较,并根据比较结果排列第一字符串和第二字符串,若两个字符串的第2个字符转义后的码值仍然相等,则需要将第一字符串的第3个字符和将第二字符串的第3个字符进行转义并进行比较,以此类推,直至排列出第一字符串和第二字符串的顺序为止。
例如,假设第一字符串为西班牙语单词(玛瑙),第二字符串为西班牙语单词Aceptar(采纳),首先将由第一字符串和第二字符串的第1个符进行转义,也就是将字符和字符A进行转义。由步骤S201可知,字符转义后的Unicode值就为0x0041 0x0080,字符A转义后的Unicode值就为0x0041 0x0000,用0x0041 0x0080减去0x0041 0x0000为正数,因此转义后的Unicode值大于A转义后的Unicode值,故将第一字符串排列在第二字符串Aceptar之后。
再假设第一字符串为西班牙语单词而第二字符串为西班牙语单词Bodega(酒店),字符B转义后的Unicode值就为0x00420x0000,用0x0041 0x0080减去0x00420x0000为负数,故字符转义后的Unicode值小于字符B转义后的Unicode值,故将第一字符串为排列在第二字符串Bodega之前,也就是说排列在Aceptar之后,Bodega之前,可见,采用上述方法排列后的结果相对于现有技术中开头的字符排在Z开头的单词之后更符合西班牙语用户的习惯。
又例如,不同语种字符串的比较,假设第一字符串为西班牙语单词Aceptar,第二字符串为英文单词Accept(接受),由于第一字符串和第二字符串的第1个字符为A,转义后的Unicode值都为0x00410x0000,故比较第1个字符无法排列第一字符串和第二字符串,第一字符串和第二字符串的第2个字符为c,转义后的Unicode值都为0x0043 0x0020,故比较第2个字符也无法排列第一字符串和第二字符串,所以还需继续比较,第一字符串的第3个字符为e,转义后的Unicode值为0x0045 0x0020,第二字符串第3个字符c,转义后的Unicode值都为0x0043 0x0020,用0x0045 0x0020减去0x0043 0x0020为正数,故将第一字符串Aceptar排列在第二字符串Accept之后。
采用上述方法两两比较,用户终端就可以将混编字符库中的所有字符串进行排序,例如采用上述方法可以将混编语言的字母顺序或者单词顺序进行重新排列。
示例性的,如表1所示为英语、西班牙语以及土耳其语的大小写字母以及标点符号的重新排序结果。
表1
如表1所示,由于在一般情况下单词或者人名为首字母大写其余为小写字母,故将小写字符转义后重新排序的好处是更加符合单词或者人名的排序习惯。
进一步的,还可以加入德语、法语或者其他语言的字母并进行重新排序,具体加入以上的一种或几种语言可以根据实际需要来设置,本实施例不在限定,排序方法与上述步骤S201~S203完全相同,不再赘述。
本发明的实施例提供一种排序方法,通过将字符串中字符的统一码值进行转义,并根据转义后的码值进行排序,能够同时兼顾多种语言的字符串的排序,从而符合不同国家用户的使用习惯。
本发明实施例还提供一种移动设备01,如图3所示,该移动设备01包括:
转义单元011,用于将第一字符串的第i个字符的统一码值进行转义,将第二字符串的第i个字符的统一码值进行转义,转义后的码值包括第i个字符对应的基准字符的统一码值和第i个字符的统一码值与第i个字符对应的基准字符的统一码值的差值。
比较单元012,用于将第一字符串的第i个字符的转义后的码值与第二字符串的第i个字符的转义后的码值进行比较。
排序单元013,用于当第一字符串的第i个字符的转义后的码值与第二字符串的第i个字符的转义后的码值不相等时,根据第一字符串的第i个字符的转义后的码值和第二字符串的第i个字符的转义后的码值的大小来排列第一字符串和第二字符串的顺序。
转义单元011还用于,当第一字符串的第i个字符的转义后的码值与第二字符串的第i个字符的转义后的码值相等时,将第一字符串的第i+1个字符的统一码值进行转义,将第二字符串的第i+1个字符的统一码值进行转义,以便比较单元012将第一字符串的第i+1个字符的转义后的码值与第二字符串的第i+1个字符转义后的码值进行比较,直至排序单元013排列出第一字符串和第二字符串的顺序。
其中,i的初始值为1。
进一步的,转义单元011具体用于:
将第一字符串的第i个字符的统一码值由两字节码值转义为三字节码值或四字节码值;
将第二字符串的第i个字符的统一码值由两字节码值转义为三字节码值或四字节码值;
其中,三字节码值或者四字节码值的高位为第i个字符对应的基准字符的统一码值;三字节码值或者四字节码值的低位为第i个字符的统一码值与第i个字符对应的基准字符的统一码值的差值。
值得注意的是,由于上述第i个字符可能为不同种类的字符,故该第i个字符对应的基准字符包括多种情况:
当第i个字符为非英文字符时,第i个字符对应的基准字符为字符对应的英文大写字母;或
当第i个字符为英文小写字母时,第i个字符对应的基准字符为字符对应的英文大写字母;或
当第i个字符为英文大写字母时,第i个字符对应的基准字符为第i个字符自身;或
当第i个字符为标点符号时,第i个字符对应的基准字符为第i个字符自身。
示例性的,字符对应的基准字符为字符A,字符对应的基准字符为字符G,字符a对应的基准字符为字符A,而字符A对应的基准字符仍为字符A,字符“]”对应的基准字符仍为字符“]”。
而后,根据字符与字符A的统一码值就可以得到字符与字符A的统一码值的差值为0x0080,根据字符与字符G的统一码值就可以得到字符与字符G的统一码值的差值为0x00D7,故字符转义后的统一码值就为0x0041 0x0080,字符转义后的统一码值就为0x0047 0x00D7,而字符A转义后的统一码值就为0x0041 0x0000,字符G转义后的统一码值就为0x0047 0x0000。
更进一步的,如图4所示,比较单元012可以至少包括以下任一种单元:
计算单元0121,用于将第一字符串的第i个字符的转义后的码值减去第二字符串的第i个字符转义后的码值;
判定单元0122,用于若第一字符串的第i个字符的转义后的码值减去第二字符串的第i个字符转义后的码值后所得的差值为正数,则判定第一字符串的第i个字符的转义后的码值大于第二字符串的第i个字符转义后的码值;若第一字符串的第i个字符的转义后的码值减去第二字符串的第i个字符转义后的码值后所得的差值为负数,则判定第一字符串的第i个字符的转义后的码值小于第二字符串的第i个字符转义后的码值;若第一字符串的第i个字符的转义后的码值减去第二字符串的第i个字符转义后的码值后所得的差值为零,则判定第一字符串的第i个字符的转义后的码值等于第二字符串的第i个字符转义后的码值。
排序单元013可以具体用于:
若第一字符串的第i个字符的转义后的码值大于第二字符串的第i个字符转义后的码值,则将第一字符串排列在第二字符串之后;
若第一字符串的第i个字符的转义后的码值小于第二字符串的第i个字符转义后的码值,则将第一字符串排列在第二字符串之前。
上述移动设备01包括但不限于手机、便携设备、PDA (Personal DigitalAssistant,个人数字助理)、电子阅读器、电子书、音频播放器、音视频播放器、笔记本电脑、平板电脑等。
本发明的实施例提供一种移动设备,通过将字符串中字符的统一码值进行转义,并根据转义后的码值进行排序,能够同时兼顾多种语言的字符串的排序,从而符合不同国家用户的使用习惯。
另外,在本发明各个实施例中的移动设备01的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。且上述的各单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台电子设备(可以是个人计算机,平板电脑,或者智能手机等)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。