String的compareTo方法
原创文章,转载请注明原文章地址,谢谢!
compareTo方法
public int compareTo(String anotherString)
其官方定义是,按字典顺序比较两个字符串。该比较基于字符串中各个字符的Unicode值。将此String对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此String对象在参数字符串之前,则比较结果为一个负整数。如果按字典顺序此String对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为0;compareTo只有在方法equals(Object)返回true时才返回0。
字典排序
如果这两个字符串不同,则要么它们在某个索引处具有不同的字符,该索引对二者均为有效索引,要么它们的长度不同,或者同时具备上述两种情况。如果它们在一个或多个索引位置上具有不同的字符,假设 k 是这类索引的最小值;则按照 < 运算符确定的那个字符串在位置 k 上具有较小的值,其字典顺序在其他字符串之前。这种情况下,compareTo 返回这两个字符串在位置 k 处的两个不同的 char 值,即值:this.charAt(k)-anotherString.charAt(k)。如果它们没有不同的索引位置,则较短字符串在字典顺序上位于较长字符串的前面。这种情况下,compareTo 返回这两个字符串长度的不同,即值:this.length()-anotherString.length()。
- 第一个字符串和第二个字符串的第一个字符不相等,那么这两个字符串都按照第一个字符的ASCII码的顺序进行比较,其比较结果返回一个整型。
public static void main(String[] args){
//hello 第一个字符 h 的ASCII值为104
String s1 = "hello";
//world 第一个字符 w 的ASCII值为119
String s2 = "world";
//比较第一个字符,调用方s1减去s2
System.out.println(s1.compareTo(s2));//-15
//比较第一个字符,调用方s2减去s1
System.out.println(s2.compareTo(s1));//15
}
- 第一个字符串和第二个字符串的第一个字符串相等,那么就取这两个字符串的第二个字符比较,如果第二个字符还是相等,那就比较第三个字符......以此类推,直到两个字符串中出现不一样的字符可以比较其字典顺序为止。
public static void main(String[] args){
//hello 第二个字符 e 的ASCII值为101
String s1 = "hello";
//world 第二个字符 i 的ASCII值为105
String s2 = "hi";
//比较第一个字符,相等,则比较第二个字符,调用方s1减去s2
System.out.println(s1.compareTo(s2));//-4
//比较第一个字符,相等,则比较第二个字符,调用方s2减去s1
System.out.println(s2.compareTo(s1));//4
}
- 如果两个比较的字符串前面几个字符都相等,但是第二个字符串比第一个字符串多几位,即第一个字符串是第二个字符串的子字符串,那么就比较着两个字符串的长度。
public static void main(String[] args){
String s1 = "hello";
String s2 = "hello world";
//s1是s2的子字符串,则比较位数,调用方s1减去s2位数
System.out.println(s1.compareTo(s2));//-6
//s1是s2的子字符串,则比较位数,调用方s2减去s1位数
System.out.println(s2.compareTo(s1));//6
}
compareToIgnoreCase方法
public int compareToIgnoreCase(String str)
其官方定义是,不考虑大小写,按字典顺序比较两个字符串。此方法返回一个整数,它的正负号是调用compareTo的正负号,调用时使用了字符串的规范化版本,其大小写差异已通过对每个字符调用Character.toLowerCase(Character.toUpperCase(character))得以消除。注意,此方法不 考虑语言环境,因此可能在某些特定的语言环境中产生不理想的排序。
附:ASCII表
ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 |
---|---|---|---|---|---|---|---|
0 | NUT | 32 | (space) | 64 | @ | 96 | 、 |
1 | SOH | 33 | ! | 65 | A | 97 | a |
2 | STX | 34 | " | 66 | B | 98 | b |
3 | ETX | 35 | # | 67 | C | 99 | c |
4 | EOT | 36 | $ | 68 | D | 100 | d |
5 | ENQ | 37 | % | 69 | E | 101 | e |
6 | ACK | 38 | & | 70 | F | 102 | f |
7 | BEL | 39 | , | 71 | G | 103 | g |
8 | BS | 40 | ( | 72 | H | 104 | h |
9 | HT | 41 | ) | 73 | I | 105 | i |
10 | LF | 42 | * | 74 | J | 106 | j |
11 | VT | 43 | + | 75 | K | 107 | k |
12 | FF | 44 | , | 76 | L | 108 | l |
13 | CR | 45 | - | 77 | M | 109 | m |
14 | SO | 46 | . | 78 | N | 110 | n |
15 | SI | 47 | / | 79 | O | 111 | o |
16 | DLE | 48 | 0 | 80 | P | 112 | p |
17 | DCI | 49 | 1 | 81 | Q | 113 | q |
18 | DC2 | 50 | 2 | 82 | R | 114 | r |
19 | DC3 | 51 | 3 | 83 | S | 115 | s |
20 | DC4 | 52 | 4 | 84 | T | 116 | t |
21 | NAK | 53 | 5 | 85 | U | 117 | u |
22 | SYN | 54 | 6 | 86 | V | 118 | v |
23 | TB | 55 | 7 | 87 | W | 119 | w |
24 | CAN | 56 | 8 | 88 | X | 120 | x |
25 | EM | 57 | 9 | 89 | Y | 121 | y |
26 | SUB | 58 | : | 90 | Z | 122 | z |
27 | ESC | 59 | ; | 91 | [ | 123 | { |
28 | FS | 60 | < | 92 | / | 124 | |
29 | GS | 61 | = | 93 | ] | 125 | } |
30 | RS | 62 | > | 94 | ^ | 126 | ` |
31 | US | 63 | ? | 95 | _ | 127 | DEL |
博客内容仅供自已学习以及学习过程的记录,如有侵权,请联系我删除,谢谢!