CASE_INSENSITIVE_ORDER

本文详细解析了Java中String类的compareToIgnoreCase方法的工作原理。该方法通过逐字符比较两个字符串来实现忽略大小写的字符串对比,并介绍了如何处理字符不匹配及字符串长度不同的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String类里的compareToIngoreCase是这样的:

public static final Comparator<String> CASE_INSENSITIVE_ORDER = new CaseInsensitiveComparator();

public int compareToIgnoreCase(String str)
{
return CASE_INSENSITIVE_ORDER.compare(this, str);
}

private static class CaseInsensitiveComparator
implements Comparator<String>, java.io.Serializable {
// use serialVersionUID from JDK 1.2.2 for interoperability
private static final long serialVersionUID = 8575799808933029326L;

public int compare(String s1, String s2) {
int n1=s1.length(), n2=s2.length();
for (int i1=0, i2=0; i1<n1 && i2<n2; i1++, i2++) {
char c1 = s1.charAt(i1);
char c2 = s2.charAt(i2);
if (c1 != c2) {
c1 = Character.toUpperCase(c1);
c2 = Character.toUpperCase(c2);
if (c1 != c2) {
c1 = Character.toLowerCase(c1);
c2 = Character.toLowerCase(c2);
if (c1 != c2) {
return c1 - c2;
}
}
}
}
return n1 - n2;
}
}

这是JDK源文件里的

比较的方法就是把两个String截成一个一个char的比较,每个char比较另一个String对应位置里的char,如果两个char都换成大写和都换成小写是一样的话,比较下一个,直到找到两个不一样的char,都转换成小写,然后return相差(ASCII里的值)。如果其中一个或者两个String都比较完了还没有同样的char的话,那就return两个String的长度差距。
E:\JavaTool\MySQL8\FIle\bin>mysqld --defaults-file="E:\JavaTool\MySQL8\my.ini" --init-file="E:\reset_password.sql" --console --skip-grant-tables --shared-memory 2025-03-12T09:19:35.322534Z 0 [System] [MY-010116] [Server] E:\JavaTool\MySQL8\FIle\bin\mysqld.exe (mysqld 8.0.19) starting as process 17320 2025-03-12T09:19:35.322621Z 0 [ERROR] [MY-010338] [Server] Can't find error-message file 'E:\JavaTool\MySQL8\FIlin\share\errmsg.sys'. Check error-message file location and 'lc-messages-dir' configuration directive. 2025-03-12T09:19:35.322988Z 0 [Warning] [MY-013242] [Server] --character-set-server: 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous. 2025-03-12T09:19:35.323756Z 0 [Warning] [MY-010091] [Server] Can't create test file E:\JavaTool\MySQL8\FIlin\data\mysqld_tmp_file_case_insensitive_test.lower-test 2025-03-12T09:19:35.323841Z 0 [Warning] [MY-010091] [Server] Can't create test file E:\JavaTool\MySQL8\FIlin\data\mysqld_tmp_file_case_insensitive_test.lower-test 2025-03-12T09:19:35.323979Z 0 [ERROR] [MY-013276] [Server] Failed to set datadir to 'E:\JavaTool\MySQL8\FIlin\data\' (OS errno: 22 - Invalid argument [OS Error Code : 0x7b]) 2025-03-12T09:19:35.325454Z 0 [ERROR] [MY-010119] [Server] Aborting 2025-03-12T09:19:35.325596Z 0 [System] [MY-010910] [Server] E:\JavaTool\MySQL8\FIle\bin\mysqld.exe: Shutdown complete (mysqld 8.0.19) MySQL Community Server - GPL.
03-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值