HOWTO · Java
Java 中忽略大写和小写
本文介绍如何在 Java 中忽略大小写。
本页内容
要判断两个 Java 字符串是否相等且不区分字母大小写,请调用 equalsIgnoreCase()。如果后续处理需要规范化后的字符串,可以先调用 toUpperCase() 或 toLowerCase(),再使用 equals() 比较。需要进行不区分大小写的排序时,请使用 compareToIgnoreCase()。
Java String 是不可变的,因此 toUpperCase() 和 toLowerCase() 会返回包含转换后内容的 String,而不会改变原始值。这些方法和 equalsIgnoreCase() 使用 Java 的大小写映射,但不提供完整的、针对特定语言的 Unicode 大小写折叠。请根据需求选择方法:判断是否相等、获取规范化后的值,或进行排序。
在 Java 中使用 toUpperCase() 方法忽略大小写
对两个字符串分别调用 toUpperCase(Locale.ROOT),然后使用 equals() 比较转换结果。Locale.ROOT 可让转换不受机器默认区域设置影响,适合标识符等程序化规范化场景。处理普通 ASCII 示例并不需要将默认区域设置为英语或美国英语。
import java.util.Locale;
public class UppercaseComparison {
public static void main(String[] args) {
String first = "icecream";
String second = "IceCream";
String normalizedFirst = first.toUpperCase(Locale.ROOT);
String normalizedSecond = second.toUpperCase(Locale.ROOT);
boolean equalIgnoringCase = normalizedFirst.equals(normalizedSecond);
System.out.println(equalIgnoringCase);
}
}
这种方法会比较转换后返回的 String 值。如果转换是为了让程序之间进行比较,请使用 Locale.ROOT;对于需要遵循特定区域语言规则的文本处理,可能需要采用其他设计。
在 Java 中使用 toLowerCase() 方法忽略大小写
小写规范化的做法相同:分别对两个字符串调用 toLowerCase(Locale.ROOT),然后使用 equals() 比较。显式指定区域设置可避免结果受用户默认区域设置影响。如果后续操作也需要规范化后的小写值,可以使用这种方式;如果只需直接判断是否相等,使用 equalsIgnoreCase() 更简单。
import java.util.Locale;
public class LowercaseComparison {
public static void main(String[] args) {
String first = "icecream";
String second = "IceCream";
String normalizedFirst = first.toLowerCase(Locale.ROOT);
String normalizedSecond = second.toLowerCase(Locale.ROOT);
boolean equalIgnoringCase = normalizedFirst.equals(normalizedSecond);
System.out.println(equalIgnoringCase);
}
}
与转换为大写一样,toLowerCase() 会返回包含转换后内容的 String,而不会改变原始值;它不能替代针对特定语言的 Unicode 大小写折叠。
在 Java 中使用 equalsIgnoreCase() 方法忽略大小写
要直接判断两个字符串是否相等,请在一个字符串上调用 equalsIgnoreCase(),并将另一个字符串作为参数传入。该方法返回布尔值:如果按照 Java 的不区分大小写比较规则,两个字符串相等,则返回 true;否则返回 false。例如,"icecream".equalsIgnoreCase("IceCream") 的结果为 true。
public class IgnoreCaseEquality {
public static void main(String[] args) {
String first = "icecream";
String second = "IceCream";
boolean equalIgnoringCase = first.equalsIgnoreCase(second);
System.out.println(equalIgnoringCase);
}
}
这种比较不会针对特定语言或区域设置进行调整,也不执行完整的 Unicode 大小写折叠。如果应用需要遵循语言学匹配规则,请使用为此需求设计的 API,不要假定该方法适用于所有语言的文本规则。
在 Java 中使用 compareToIgnoreCase() 方法忽略大小写
需要进行不区分大小写的字典序排序时(例如对字符串排序),请使用 compareToIgnoreCase()。结果为零表示两个字符串在忽略大小写后相等。结果为负数表示第一个字符串排在第二个字符串之前;结果为正数则表示排在之后。返回的非零整数不保证等于两个字符串中第一个不同字符的差值。
public class IgnoreCaseOrdering {
public static void main(String[] args) {
String first = "apple";
String second = "Banana";
int comparison = first.compareToIgnoreCase(second);
System.out.println(comparison < 0);
}
}
示例会输出一个布尔值,表示两者是否符合指定的排序关系。如果只需要判断是否相等,请改用 equalsIgnoreCase()。