一种字符串排序方法及装置与流程

文档序号:18796567发布日期:2019-09-29 19:45阅读:155来源:国知局
一种字符串排序方法及装置与流程

本申请属于计算机技术领域,尤其涉及字符串排序方法及装置。



背景技术:

随着存储技术的不断发展,无论是终端还是服务器都会存储大量的文件,视频网站的服务器更是存储有海量的视频文件。为了便于管理和查找文件,通常要对文件进行排序。对多个文件的排序,其实质是对多个文件的名称进行排序,也就是对多个字符串进行排序。

由于文件的命名往往比较随意,就导致文件的名称会包含多种类型的字符。如何对多个由多类型字符构成的字符串进行排序,是本领域技术人员面临的技术难题。



技术实现要素:

有鉴于此,本申请的目的在于提供一种字符串排序方法及装置,以实现对多个由多类型字符构成的字符串进行排序的目的。

为实现上述目的,本申请提供如下技术方案:

本申请提供一种字符串排序方法,包括:

获得第一统一码和第二统一码;其中,所述第一统一码为待排序的第一字符串对应的统一码,所述第二统一码为待排序的第二字符串对应的统一码;

按照从高位到低位的顺序,分别在所述第一统一码中和所述第二统一码中依次提取码段,直至在所述第一统一码中提取出的第一码段,不同于在所述第二统一码中提取出的第二码段;其中,在所述第一统一码中提取的码段对应于所述第一字符串中的一个字符;在所述第二统一码中提取的码段对应于所述第二字符串中的一个字符;

在所述第一码段对应的字符和所述第二码段对应的字符为不同字符类型的情况下,根据预设的多个字符类型的大小关系,确定所述第一码段对应的字符和所述第二码段对应的字符的大小关系;

确定所述第一码段对应的字符和所述第二码段对应的字符中较大者对应的字符串大于另一字符串;

根据所述第一字符串和所述第二字符串的大小关系,对所述第一字符串和所述第二字符串进行排序。

可选的,在上述方法的基础上,还包括:

在所述第一码段对应的字符和所述第二码段对应的字符均为数字类型的情况下,在所述第一统一码中提取第三码段,在所述第二统一码中提取第四码段;其中,所述第三码段为第一数字串对应的码段,所述第四码段为第二数字串对应的码段;所述第一数字串为所述第一码段对应的字符在所述第一字符串中所属的数字串,所述第二数字串为所述第二码段对应的字符在所述第二字符串中所属的数字串;

将所述第三码段转换为浮点型的第一数据,将所述第四码段转换为浮点型的第二数据;

确定所述第一数据和所述第二数据中较大者对应的字符串大于另一字符串。

可选的,在上述方法的基础上,还包括:

在所述第一码段对应的字符和所述第二码段对应的字符均为中文字类型的情况下,获得第一拼音和第二拼音,其中,所述第一拼音为所述第一码段对应的字符的拼音,所述第二拼音为所述第二码段对应的字符的拼音;

按照从左到右的顺序,分别在所述第一拼音和所述第二拼音中依次提取字母;

如果在所述第一拼音和所述第二拼音中提取出的处于相同次序的两个字母不同,则比较所述两个字母的大小,确定所述两个字母中较大者对应的字符串大于另一字符串;

如果所述第一拼音和所述第二拼音包含相同数量的字母,且所述第一拼音和所述第二拼音中处于相同次序的字母均相同,则比较所述第一拼音中的第一声调和所述第二拼音中的第二声调的大小,确定所述第一声调和所述第二声调中较大者对应的字符串大于另一字符串。

可选的,在上述方法的基础上,还包括:

如果所述第一拼音和所述第二拼音相同,则获得所述第一码段对应的字符的第一ascⅱ码和所述第二码段对应的字符的第二ascⅱ码,比较所述第一ascⅱ码和所述第二ascⅱ码的大小,确定所述第一ascⅱ码和所述第二ascⅱ码中较大者对应的字符串大于另一字符串。

可选的,在上述方法的基础上,还包括:

在所述第一统一码和所述第二统一码中的任意一个完成全部码段的提取,但未提取到不同的码段的情况下,确定所述第一统一码和所述第二统一码中长度较大者对应的字符串大于另一字符串。

本申请还提供一种字符串排序装置,包括:

数据获取单元,用于获得第一统一码和第二统一码;其中,所述第一统一码为待排序的第一字符串对应的统一码,所述第二统一码为待排序的第二字符串对应的统一码;

码段提取单元,用于按照从高位到低位的顺序,分别在所述第一统一码中和所述第二统一码中依次提取码段,直至在所述第一统一码提取出的第一码段,不同于在所述第二统一码中提取出的第二码段;其中,在所述第一统一码提取的码段对应于所述第一字符串中的一个字符;在所述第二统一码中提取的码段对应于所述第二字符串中的一个字符;

字符类型比较单元,用于在所述第一码段对应的字符和所述第二码段对应的字符为不同字符类型的情况下,根据预设的多个字符类型的大小关系,确定所述第一码段对应的字符和所述第二码段对应的字符的大小关系;确定所述第一码段对应的字符和所述第二码段对应的字符中较大者对应的字符串大于另一字符串;

排序单元,用于根据所述第一字符串和所述第二字符串的大小关系,对所述第一字符串和所述第二字符串进行排序。

可选的,在上述装置的基础上,还包括:

数字串比较单元,用于在所述第一码段对应的字符和所述第二码段对应的字符均为数字类型的情况下,在所述第一统一码中提取第三码段,在所述第二统一码中提取第四码段;其中,所述第三码段为第一数字串对应的码段,所述第四码段为第二数字串对应的码段;所述第一数字串为所述第一码段对应的字符在所述第一字符串中所属的数字串,所述第二数字串为所述第二码段对应的字符在所述第二字符串中所属的数字串;将所述第三码段转换为浮点型的第一数据,将所述第四码段转换为浮点型的第二数据;确定所述第一数据和所述第二数据中较大者对应的字符串大于另一字符串。

可选的,在上述装置的基础上,还包括:

拼音比较单元,用于在所述第一码段对应的字符和所述第二码段对应的字符均为中文字类型的情况下,获得第一拼音和第二拼音,其中,所述第一拼音为所述第一码段对应的字符的拼音,所述第二拼音为所述第二码段对应的字符的拼音;按照从左到右的顺序,分别在所述第一拼音和所述第二拼音中依次提取字母;如果在所述第一拼音和所述第二拼音中提取出的处于相同次序的两个字母不同,则比较所述两个字母的大小,确定所述两个字母中较大者对应的字符串大于另一字符串;如果所述第一拼音和所述第二拼音包含相同数量的字母,且所述第一拼音和所述第二拼音中处于相同次序的字母均相同,则比较所述第一拼音中的第一声调和所述第二声调中的第二音调的大小,确定所述第一声调和所述第二声调中较大者对应的字符串大于另一字符串。

可选的,在上述装置的基础上,还包括:

标准代码比较单元,用于在所述拼音比较单元确定所述第一拼音和所述第二拼音相同的情况下,获得所述第一码段对应的字符的第一ascⅱ码和所述第二码段对应的字符的第二ascⅱ码,比较所述第一ascⅱ码和所述第二ascⅱ码的大小,确定所述第一ascⅱ码和所述第二ascⅱ码中较大者对应的字符串大于另一字符串。

可选的,在上述装置的基础上,还包括:

长度比较单元,用于在所述第一统一码和所述第二统一码中的任意一个完成全部码段的提取,但未提取到不同的码段的情况下,确定所述第一统一码和所述第二统一码中长度较大者对应的字符串大于另一字符串。

由此可见,本申请公开的字符串排序方法,针对待排序的第一字符串和第二字符串,首先获得与第一字符串对应的第一统一码、以及与第二字符串对应的第二统一码,之后按照从高位到低位的顺序,分别在第一统一码中和第二统一码中依次提取码段,如果提取出的两个码段相同,则继续进行提取码段的操作,直至从第一统一码提取出的第一码段不同于在第二统一码中提取出的第二码段,如果第一码段和第二码段对应的字符的字符类型不同,则按照预设的多个字符类型的大小关系,确定第一码段对应的字符和第二码段对应的字符的大小,进而确定第一字符串和第二字符串的大小关系,之后按照第一字符串和第二字符串的大小关系,对两个字符串进行排序。本申请公开的字符串排序方法,将待排序的字符串转换为统一码,通过对统一码进行比较确定字符串的大小,在待排序的多个字符串包含多种类型的字符的情况下,也能够快速地确定多个字符串的大小关系,从而实现对多个字符串的排序,也提高了字符串排序的效率。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请公开的一种字符串排序方法的流程示意图;

图2为本申请公开的另一种字符串排序方法的流程示意图;

图3为本申请公开的另一种字符串排序方法的流程示意图;

图4为本申请公开的另一种字符串排序方法的流程示意图;

图5为本申请公开的一种字符串排序装置的结构示意图;

图6为本申请公开的另一种字符串排序装置的结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

如图1所示,为本申请公开的一种字符串排序方法的流程示意图。该字符串排序方法包括:

s101:获得第一统一码和第二统一码。

其中,第一统一码为待排序的第一字符串对应的统一码,第二统一码为待排序的第二字符串对应的统一码。

实施中,获得待排序的两个字符串,将两个字符串分别称为第一字符串和第二字符串。分别确定第一字符串和第二字符串对应的统一码,将与第一字符串对应的统一码称为第一统一码,将与第二字符串对应的统一码称为第二统一码。统一码又称为万国码或者单一码,英文名称为unicode。unicode有多编码方案,例如utf-8、utf-16和utf-32。

utf-8是一种可变长度编码方案,它使用1至4个字节表示一个字符,根据字符的不同变换长度,编码规则如下:对于单个字节的字符,第一位设为0,后面的7位对应这个字符的unicode码点;对于需要使用n个字节来表示的字符(n>1),第一个字节的前n位都设为1,第n+1位设为0,剩余的n-1个字节的前两位都设为10,剩下的二进制位则使用这个字符的unicode码点来填充。

utf-16也是可变长度编码,使用2个或者4个字节表示一个字符。utf-32以32位无符号整数为单位。unicode的utf-32编码就是其对应的32位无符号整数。

与utf-16和utf-32相比,utf-8能够节省存储空间。作为一种优选方案,本申请中第一统一码和第二统一码为utf-8格式的统一码。

s102:按照从高位到低位的顺序,分别在第一统一码中和第二统一码中依次提取码段,直至在第一统一码提取出的第一码段,不同于在第二统一码中提取出的第二码段。

本申请中,将第一统一码和第二统一码中与一个字符对应的字节(数量为一个或多个)称为一个码段。在第一统一码中提取出的码段对应于第一字符串中的一个字符;在第二统一码中提取出的码段对应于第二字符串中的一个字符。

例如,第一统一码和第二统一码分别包括5个字符,按照从高位到低位的顺序,第一统一码中的第一个码段对应于第一字符串的第一个字符,第一统一码中的第二个码段对应于第一字符串的第二个字符,以此类推,第一统一码中的第五个码段对应于第一字符串的第五个字符。第二统一码中的第一个码段对应于第二字符串的第一个字符,第二统一码中的第二个码段对应于第二字符串的第二个字符,以此类推,第二统一码中的第五个码段对应于第二字符串的第五个字符。

需要说明的是,第一统一码和第二统一码中最左侧为最高位,最右侧为最低位。按照从高位到低位的顺序,分别在第一统一码中和第二统一码中依次提取码段,即:按照从左到右的顺序,分别在第一统一码和第二统一码中依次提取码段。

实施中,根据第一统一码和第二统一码所采用的编码方案,就可以确定如何分别在第一统一码和第二统一码中依次提取出码段。

以第一统一码和第二统一码为utf-8格式的统一码为例:

如果一个字符由一个字节表示,那么与该字符对应的码段的首位为“0”;如果一个字符由两个字节表示,那么与该字符对应的码段包括两个字节,第一个字节的前三位为“110”,第二个字节的前两位为“10”;如果一个字符由三个字节表示,那么与该字符对应的码段包括三个字节,第一个字节的前四位为“1110”,其他字节的前两位为“10”;如果一个字符由四个字节表示,那么与该字符对应的码段包括四个字节,第一个字节的前五位为“1110”,其他字节的前两位为“10”。

假如第一统一码为“1110011010110001100010010100······”,根据utf-8的编码规则可知,“111001101011000110001001”对应于一个字符,在第一统一码中提取出的第一个码段即为“111001101011000110001001”,该码段对应于字符“汉”。

实施中,从第一统一码的最高位开始,提取第一个码段,该码段对应于第一字符串中的第一个字符,从第二统一码的最高位开始,提取第一个码段,该码段对应于第二字符串中的第一个字符。判断提取到的两个码段是否相同,如果这两个码段相同,则在第一统一码中提取第二个码段,该码段对应于第一字符串中的第二个字符,在第二统一码中提取第二个码段,该码段对应于第二字符串中的第二个字符。判断提取到的两个码段是否相同,如果两个码段相同,那么按照从高位到低位的顺序,继续在第一统一码和第二统一码中提取码段,直至在第一统一码中提取的码段与在第二统一码中提取的码段不同。

s103:在第一码段对应的字符和第二码段对应的字符为不同字符类型的情况下,根据预设的多个字符类型的大小关系,确定第一码段对应的字符和第二码段对应的字符的大小关系。

当在第一统一码中提取出的第一码段不同于在第二统一码中提取出的第二码段时,确定第一码段和第二码段对应的字符的字符类型。如果第一码段和第二码段对应的字符的字符类型不同,那么根据预设的多个字符类型的大小关系,确定第一码段对应的字符和第二码段对应的字符的大小关系。

例如,在中文环境中使用的字符类型通常包括特殊字符、字母、数字和中文字。作为一种实施方式,将多个字符类型的大小关系预先定义为:特殊字符<数字<字母<中文字。如果第一码段对应的字符的字符类型为中文字,第二码段对应的字符的字符类型为数字,那么根据前述定义的多个字符类型的大小关系可以确定,第一码段对应的字符大于第二码段对应的字符。

s104:确定第一码段对应的字符和第二码段对应的字符中较大者对应的字符串大于另一字符串。

也就是说,如果第一码段对应的字符大于第二码段对应的字符,那么确定第一字符串大于第二字符串;如果第一码段对应的字符小于第二码段对应的字符,那么确定第一字符串小于第二字符串。

为便于更好的理解技术方案,下面进行举例说明:

按照从高位到低位的顺序,分别在第一统一码中和第二统一码中依次提取码段,第一次提取出的两个码段相同,第二次提取出的两个码段相同,第三次提取到的两个码段不同,假设在第一统一码提取出的第一码段对应的字符为“第”,在第二统一码提取出的第二码段对应的字符为“3”,从而确定第一码段对应的字符的字符类型为中文字类型,第二码段对应的字符的字符类型为数字类型。根据预设的多个字符类型的大小关系,数字类型小于中文类型,因此,第一码段对应的字符大于第二码段对应的字符,由此确定第一字符串大于第二字符串。

s105:根据第一字符串和第二字符串的大小关系,对第一字符串和第二字符串进行排序。

本申请上述公开的字符串排序方法,针对待排序的第一字符串和第二字符串,首先获得与第一字符串对应的第一统一码,获得与第二字符串对应的第二统一码,之后按照从高位到低位的顺序,分别在第一统一码中和第二统一码中依次提取码段,如果提取出的两个码段相同,则继续进行提取码段的操作,直至从第一统一码提取出的第一码段不同于在第二统一码中提取出的第二码段,如果第一码段和第二码段对应的字符的字符类型不同,则按照预设的多个字符类型的大小关系,确定第一码段对应的字符和第二码段对应的字符的大小,进而确定第一字符串和第二字符串的大小关系,之后按照第一字符串和第二字符串的大小关系,对两个字符串进行排序。本申请上述公开的字符串排序方法,将待排序的字符串转换为统一码,通过对统一码进行比较确定字符串的大小,在待排序的多个字符串包含多种类型的字符的情况下,也能够快速地确定多个字符串的大小关系,从而实现对多个字符串的排序,也提高了字符串排序的效率。

如图2所示,为本申请实施例提供的另一种字符串排序方法的流程示意图。该字符串排序方法包括:

s201:获得第一统一码和第二统一码。

其中,第一统一码为待排序的第一字符串对应的统一码,第二统一码为待排序的第二字符串对应的统一码。

s202:按照从高位到低位的顺序,分别在第一统一码中和第二统一码中依次提取码段,直至在第一统一码提取出的第一码段,不同于在第二统一码中提取出的第二码段。

其中,在第一统一码提取出的码段对应于第一字符串中的一个字符;在第二统一码中提取出的码段对应于第二字符串中的一个字符。

步骤s201和步骤s202的具体实现过程与图1示出的步骤s101和步骤s102一致,这里不再赘述。

s203:在第一码段对应的字符和第二码段对应的字符均为数字类型的情况下,在第一统一码中提取第三码段,在第二统一码中提取第四码段。

其中,第三码段为第一数字串对应的码段,第四码段为第二数字串对应的码段;第一数字串为第一码段对应的字符在第一字符串中所属的数字串,第二数字串为第二码段对应的字符在第二字符串中所属的数字串。需要说明的是,第一数字串和第二数字串可能仅包括一位数字,第一数字串和第二数字串也可能包括小数点。

当在第一统一码中提取出的第一码段不同于在第二统一码中提取出的第二码段时,确定第一码段对应的字符的字符类型,确定第二码段对应的字符的字符类型。如果第一码段对应的字符与第二码段对应的字符均为数字类型,那么,在第一统一码中提取第三码段,在第二统一码中提取第四码段。

其中,第三码段包括第一码段,可能还包括与第一码段连续的,且字符类型为数字类型或者为小数点的码段。第四码段包括第二码段,可能还包括与第二码段连续的,且字符类型为数字类型或者为小数点的码段。

s204:将第三码段转换为浮点型的第一数据,将第四码段转换为浮点型的第二数据。

s205:确定出第一数据和第二数据中较大者对应的字符串大于另一字符串。

也就是说,如果第一数据大于第二数据,那么第一字符串大于第二字符串;如果第一数据小于第二数据,那么确定第一字符串小于第二字符串。

需要说明的是,第一数字串和第二数字串可能包含小数点,将第三码段和第四码段转换为浮点型数据,之后再进行比较,能够保证比较结果的正确性。

为便于更好的理解技术方案,下面进行举例说明:

待排序的两个字符串为“妻子密码第90集”和“妻子密码第100集”。首先获得与第一字符串“妻子密码第90集”对应的第一统一码,获得与第二字符串“妻子密码第100集”对应的第二统一码。

按照从高位到低位的顺序,分别在第一统一码中和第二统一码中依次提取码段,直至在第一统一码提取出与字符“9”对应的第一码段,在第二统一码中提取出与字符“1”对应的第二码段。由于第一码段对应的字符“9”和第二码段对应的字符“1”均为数字类型,因此,在第一统一码中提取第三码段,在第二统一码中提取第四码段,该第三码段为与数字串“90”对应的码段,该第四码段为与数字串“100”对应的码段。将第三码段转换为浮点型的第一数据90(十进制),将第四码段转换为浮点型的第二数据100(十进制)。由于第二数据大于第一数据,因此确定第二数据对应的字符串大于第一数据对应的字符串,即,确定第二字符串大于第一字符串。

可以看到,在需要根据第一字符串和第二字符串中的数字确定第一字符串和第二字符串的大小时,本申请是对数字串进行数值比较,而不是进行文本比较,得到的比较结果更加准确。结合上述的例子进行说明:如果对第一字符串和第二字符串中的数字进行文本比较,“100”中的第一位“1”小于“90”中的第一位“9”,那么就会得出第一字符串大于第二字符串的比较结果,该比较结果是错误的。

s206:根据第一字符串和第二字符串的大小关系,对第一字符串和第二字符串进行排序。

本申请图2公开的字符串排序方法,针对待排序的第一字符串和第二字符串,首先获得与第一字符串对应的第一统一码、以及与第二字符串对应的第二统一码,之后按照从高位到低位的顺序,分别在第一统一码中和第二统一码中依次提取码段,直至从第一统一码提取出的第一码段不同于在第二统一码中提取出的第二码段,如果第一码段对应的字符和第二码段对应的字符为数字类型,那么在第一统一码中提取出与第一数字串对应的第三码段,在第二统一码中提取出与第二数字串对应的第三码段,之后将第三码段转换为浮点型的第一数据,将第四码段转换为浮点型的第二数据,通过比较两个浮点型的数据确定第一字符串和第二字符串的大小。本申请上述公开的字符串排序方法,当需要根据数字确定第一字符串和第二字符串的大小关系时,通过对第一字符串和第二字符串中的数字串进行数值比较,能够准确地确定第一字符串和第二字符串的大小关系。

如图3所示,为本申请实施例提供的另一种字符串的排序方法的流程示意图。该字符串排序方法包括:

s301:获得第一统一码和第二统一码。

其中,第一统一码为待排序的第一字符串对应的统一码,第二统一码为待排序的第二字符串对应的统一码。

s302:按照从高位到低位的顺序,分别在第一统一码中和第二统一码中依次提取码段,直至在第一统一码提取出的第一码段,不同于在第二统一码中提取出的第二码段。

其中,在第一统一码提取的码段对应于第一字符串中的一个字符;在第二统一码中提取的码段对应于第二字符串中的一个字符。

步骤s301和步骤s302的具体实现过程与图1示出的步骤s101和步骤s102一致,这里不再赘述。

s303:在第一码段对应的字符和第二码段对应的字符均为中文字类型的情况下,获得第一拼音和第二拼音。

其中,第一拼音为第一码段对应的字符的拼音,第二拼音为第二码段对应的字符的拼音。

作为一种实施方式,在第一码段对应的字符和第二码段对应的字符均为中文字类型的情况下,通过引用中文拼音包,获得第一码段对应的第一拼音和第二码段对应的第二拼音。

s304:按照从左到右的顺序,分别在第一拼音和第二拼音中依次提取字母。

s305:如果在第一拼音和第二拼音中提取出的处于相同次序的两个字母不同,则比较这两个字母的大小。

s306:确定两个字母中较大者对应的字符串大于另一字符串,执行s309。

s307:如果第一拼音和第二拼音包含相同数量的字母,且第一拼音和第二拼音中处于相同次序的字母均相同,则比较第一拼音中的第一声调和第二拼音中的第二声调的大小。

s308:确定第一声调和第二声调中较大者对应的字符串大于另一字符串,执行s309。

需要说明的是,如果第一拼音和第二拼音包含不同数量的字母,在第一拼音和第二拼音中的任意一个完成全部字母的提取,但未提取到处于相同次序但不同的字母的情况下,确定第一拼音和第二拼音中包含字母数量较大者对应的字符串大于另一字符串。例如:第一拼音为“xian”,第二拼音为“xiang”,第一拼音中位于第1位至第4位的字母与第二拼音中位于第1位至第4位的字母均相同,在针对第一拼音完成全部字母的提取后,仍未提取到处于相同次序但不同的字母,因此,确定第二拼音对应的第二字符串大于第一拼音对应的第一字符串。

s309:根据第一字符串和第二字符串的大小关系,对第一字符串和第二字符串进行排序。

为便于更好的理解技术方案,下面进行举例说明:

假设第一码段对应的字符为“文”,第二码段对应的字符为“为”,第一码段和第二码段对应的字符均为中文字类型,通过引用中文拼音包,获得第一拼音“wen2”和第二拼音“wei2”。需要说明的是,拼音包含声调,声调以数字表示。可选的,一声、二声、三声、四声和轻声依次以数值逐渐增大的数字表示,或者依次以数值逐渐减小的数字表示。另外,声调可以用整数表示,也可以用小数表示。例如,一声、二声、三声、四声和轻声依次以十进制的1、2、3、4和5表示。第一拼音“wen2”和第二拼音“wei2”中的“2”为声调。

按照从左到右的顺序,分别在第一拼音和第二拼音中依次提取字母,直至在第一拼音中提取出的第一字母“n”,不同于在第二拼音中提取出的第二字母“i”。比较第一字母“n”和第二字母“i”的大小,得到第一字母“n”大于第二字母“i”的结果,因此确定第一字符串大于第二字符串。

假设第一码段对应的字符为“集”,第二码段对应的字符为“季”,第一码段和第二码段对应的字符均为中文字类型,通过引用中文拼音包,获得第一拼音“ji2”和第二拼音“ji4”。按照从左到右的顺序,分别在第一拼音和第二拼音中依次提取字母,由于第一拼音和第二拼音中处于相同次序的字母均相同,因此要比较第一拼音中的第一声调和第二拼音中的第二声调的大小,从而确定第一字符串和第二字符串的大小。以一声、二声、三声、四声和轻声依次以数值逐渐增大的数字表示为例,得到第二拼音中的第二声调大于第一拼音中的第一声调的结果,因此,确定第二字符串大于第一字符串。

这里需要说明的是,如果拼音中的声调是以小数表示,那么在比较两个声调的大小时,可以先将表示声调的两个小数转换为浮点型数据,再比较两个浮点型数据的大小。

本申请图3公开的字符串排序方法,针对待排序的第一字符串和第二字符串,首先获得与第一字符串对应的第一统一码、以及与第二字符串对应的第二统一码,之后按照从高位到低位的顺序,分别在第一统一码中和第二统一码中依次提取码段,直至从第一统一码提取出的第一码段不同于在第二统一码中提取出的第二码段,如果第一码段对应的字符和第二码段对应的字符为中文字类型,那么,获得第一拼音和第二拼音,按照从左到右的顺序,逐个比对第一拼音和第二拼音中处于相同次序的字母,如果第一拼音和第二拼音中处于相同次序的两个字母不同,那么通过比较两个字母的大小确定第一字符串和第二字符串的大小关系,如果第一拼音和第二拼音中处于相同次序的字母均相同,那么通过比较第一拼音和第二拼音中声调的大小,确定第一字符串和第二字符串的大小关系,从而对字符串进行排序。

由于中文存在大量的同音字,因此,待排序的第一字符串和第二字符串中,按照从高位到低位的顺序首次出现的不同字符可能为同音字,在这种情况下,可以基于这两个同音字ascⅱ码来确定第一字符串和第二字符串的大小。

具体的,在图3所示字符串排序方法的基础上,可以进一步设置以下步骤:

在第一拼音和第二拼音相同的情况下,获得第一码段对应的字符的第一ascⅱ码和第二码段对应的字符的第二ascⅱ码,比较第一ascⅱ码和第二ascⅱ码的大小,确定第一ascⅱ码和第二ascⅱ码中较大者对应的字符串大于另一字符串。

本申请上述公开的字符串排序方法,在第一码段对应的字符和第二码段对应的字符为同音字的情况下,获得两个字符的ascⅱ码,通过比较两个ascⅱ码的大小确定两个字符串的大小,从而对两个字符串进行排序。

在实施中,当在第一统一码中提取出的第一码段不同于在第二统一码中提取出的第二码段时,如果第一码段对应的字符和第二码段对应的字符均为特殊字符,那么将第一码段转换为第三ascⅱ码,将第二码段转换为第四ascⅱ码,确定出第三ascⅱ码和第四ascⅱ码中较大者对应的字符串大于另一字符串。

在实施中,当在第一统一码中提取出的第一码段不同于在第二统一码中提取出的第二码段时,如果第一码段对应的字符和第二码段对应的字符均为字母,那么比较两个字母的大小,确定较大的字母对应的字符串大于另一字符串。

在实施中,如果在第一统一码和第二统一码中的任意一个完成全部码段的提取,但未提取到不同的码段的情况下,确定第一统一码和第二统一码中长度较大者对应的字符串大于另一字符串。

例如:第一字符串为“夫妻密码第100集”,第二字符串为“夫妻密码第100集-精彩片段”。按照从高位到低位的顺序,分别在第一字符串“夫妻密码第100集”对应的第一统一码和第二字符串“夫妻密码第100集-精彩片段”对应的第二统一码中依次提取码段,由于第一字符串包括9个字符,并且第一字符串与第二字符串的前9个字符完全相同,因此,当完成第一字符串的全部码段提取后,仍然不会提取到不同的码段,这种情况下,确定第二字符串大于第一字符串。

基于上述的实施例,按照从高位到低位的顺序,分别在第一统一码中和第二统一码中依次提取码段,若在第一统一码和第二统一码中的任意一个完成全部码段的提取,但未提取到不同的码段的情况下,确定第一统一码和第二统一码中长度较大者大于另一字符串。

下面结合图4对本申请公开的字符串排序方法进行说明,请参见图4,包括:

s401:获得第一统一码和第二统一码;

其中,第一统一码为第一字符串对应的统一码,第二统一码为第二字符串对应的统一码。

s402:按照从高位到低位的顺序,分别在第一统一码和第二统一码中提取第i个码段,其中i的初始值为1。

s403:判断提取到的两个第i个码段是否相同;若相同,则执行s404,若不同,则执行s406。

s404:判断第一统一码和第二统一码是否还有未提取的码段,若第一统一码和第二统一码均有未提取的码段,则执行s405,否则,执行s411。

s405:将i加1,执行s402。

s406:确定两个第i个码段对应的字符的字符类型;如果两个第i个码段对应的字符的字符类型不同,则执行s407,如果两个第i个码段对应的字符的字符类型相同,则根据具体的字符类型执行s408、s409、s410和s412中的一个;具体的,如果都为数字类型,则执行s408,如果都为中文字类型,则执行s409,如果都为特殊字符类型则执行s410,如果都为字母,则执行s412。

s407:按照预设的多个字符类型的大小关系,确定两个第i个码段对应的字符的大小关系,从而确定第一字符串和第二字符串的大小关系,执行s413。

s408:在第一统一码中提取第三码段,在第二码段中提取第四码段,根据第三码段和第四码段确定第一字符串和第二字符串的大小关系,执行s413。

s409:获得两个码段对应的字符的第一拼音和第二拼音,根据第一拼音和第二拼音确定第一字符串和第二字符串的大小关系,执行s413。

s410:将两个码段分别转换为ascⅱ码,根据两个ascⅱ码确定第一字符串和第二字符串的大小关系,执行s413。

s411:根据第一统一码和第二统一码的长度确定第一字符串和第二字符串的大小关系,执行s413。

s412:根据两个字母确定第一字符串和第二字符串的大小关系,执行s413。

s413:根据第一字符串和第二字符串的大小关系,对第一字符串和第二字符串进行排序。

本申请上述公开了字符串排序方法,相应的,本申请还公开字符串排序装置。说明书中关于字符串排序方法和字符串排序装置的说明,可以相互参考。

参见图5,图5为本申请公开的一种字符串排序装置的结构示意图。该包括数据获取单元10、码段提取单元20、字符类型比较单元30和排序单元40。

其中:

数据获取单元10,用于获得第一统一码和第二统一码。其中,第一统一码为待排序的第一字符串对应的统一码,第二统一码为待排序的第二字符串对应的统一码。

码段提取单元20,用于按照从高位到低位的顺序,分别在第一统一码中和第二统一码中依次提取码段,直至在第一统一码提取出的第一码段,不同于在第二统一码中提取出的第二码段。其中,在第一统一码提取的码段对应于第一字符串中的一个字符;在第二统一码中提取的码段对应于第二字符串中的一个字符。

字符类型比较单元30,用于在第一码段对应的字符和第二码段对应的字符为不同字符类型的情况下,根据预设的多个字符类型的大小关系,确定第一码段对应的字符和第二码段对应的字符的大小关系;确定第一码段对应的字符和第二码段对应的字符中较大者对应的字符串大于另一字符串。

排序单元40,用于根据第一字符串和第二字符串的大小关系,对第一字符串和第二字符串进行排序。

本申请公开的字符串排序装置,将待排序的第一字符串和第二字符串转换为统一码,按照从高位到低位的顺序,分别在两个统一码中依次提取码段,直至从两个统一码中提取出的码段不同,如果这两个码段对应的字符为不同的字符类型,按照字符类型确定这两个码段对应的字符的大小,并根据这两个码段对应的字符的大小确定第一字符串和第二字符串的大小,之后对第一字符串和第二字符串进行排序。本申请公开的字符串排序装置,将待排序的字符串转换为统一码,通过对统一码进行比较确定字符串的大小,在待排序的多个字符串包含多种类型的字符的情况下,也能够快速地确定多个字符串的大小关系,从而实现对多个字符串的排序。

可选的,在上述公开的字符串排序装置的基础上,进一步设置数字串比较单元50,如图6中所示。

数字串比较单元50用于:在第一码段对应的字符和第二码段对应的字符均为数字类型的情况下,在第一统一码中提取第三码段,在第二统一码中提取第四码段;其中,第三码段为第一数字串对应的码段,第四码段为第二数字串对应的码段;第一数字串为第一码段对应的字符在第一字符串中所属的数字串,第二数字串为第二码段对应的字符在第二字符串中所属的数字串;将第三码段转换为浮点型的第一数据,将第四码段转换为浮点型的第二数据;确定第一数据和第二数据中较大者对应的字符串大于另一字符串。

可选的,在上述公开的字符串排序装置的基础上,进一步设置拼音比较单元60,如图6中所示。

拼音比较单元60用于:在第一码段对应的字符和第二码段对应的字符均为中文字类型的情况下,获得第一拼音和第二拼音,其中,第一拼音为第一码段对应的字符的拼音,第二拼音为第二码段对应的字符的拼音;按照从左到右的顺序,分别在第一拼音和第二拼音中依次提取字母,如果在第一拼音和第二拼音中提取出的处于相同次序的两个字母不同,则比较这两个字母的大小,确定这两个字母中较大者对应的字符串大于另一字符串;如果第一拼音和第二拼音包含相同数量的字母,且第一拼音和第二拼音中处于相同次序的字母均相同,则比较第一拼音中的第一声调和第二声调中的第二音调的大小,确定第一声调和第二声调中较大者对应的字符串大于另一字符串。

可选的,在上述公开的字符串排序装置的基础上,进一步设置标准代码比较单元70,如图6中所示。

标准代码比较单元70用于:在拼音比较单元60确定第一拼音和第二拼音相同的情况下,获得第一码段对应的字符的第一ascⅱ码和第二码段对应的字符的第二ascⅱ码,比较第一ascⅱ码和第二ascⅱ码的大小,确定第一ascⅱ码和第二ascⅱ码中较大者对应的字符串大于另一字符串。

可选的,在上述公开的字符串排序装置的基础上,进一步设置长度比较单元80,如图6中所示。

长度比较单元80用于:在第一统一码和第二统一码中的任意一个完成全部码段的提取,但未提取到不同的码段的情况下,确定第一统一码和第二统一码中长度较大者对应的字符串大于另一字符串。

可选的,在上述公开的字符串排序装置的基础上,进一步设置特殊字符比较单元。该特殊字符比较单元用于:在第一码段对应的字符和第二码段对应的字符均为特殊字符的情况下,将第一码段转换为第三ascⅱ码,将第二码段转换为第四ascⅱ码,确定出第三ascⅱ码和第四ascⅱ码中较大者对应的字符串大于另一字符串。

可选的,在上述公开的字符串排序装置的基础上,进一步设置字母比较单元。该字母比较单元用于:在第一码段对应的字符和第二码段对应的字符均为字母的情况下,比较两个字母的大小,确定较大的字母对应的字符串大于另一字符串。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1