Java流程控制语句
4 Java字符串处理
4.1 Java定义字符串
4.2 小白如何使用Java API帮助文档?
4.3 Java String和int的相互转换
4.4 Java字符串拼接
4.5 Java获取字符串长度
4.6 Java字符串大小写转换
4.7 Java去除字符串中的空格
4.8 Java提取子字符串
4.9 Java分割字符串
4.10 Java截取新闻标题
4.11 Java字符串的替换
4.12 Java字符串替换实例
4.13 Java字符串比较
4.14 Java中容易混淆的空字符串和null
4.15 Java查找字符串
4.16 【Java项目实战】校验文件名和邮箱地址
4.17 Java字符串实现简单加密解密
4.18 Java StringBuffer类
4.19 Java利用StringBuffer替换特殊字符
4.20 String、StringBuffer和StringBuilder的区别
4.21 Java正则表达式
4.22 Pattern和Matcher的使用
4.23 Java正则表达式验证电话号码
4.24 Java使用正则表达式验证IP地址
Java数字和日期处理 Java内置包装类 Java数组处理 Java类和对象 Java继承和多态 Java异常处理 Java集合、泛型和枚举 Java反射机制 Java输入/输出流 Java注解
字符串比较是常见的操作,包括比较相等、比较大小、比较前缀和后缀串等。 Java 中,比较字符串的常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法。 下面详细介绍这 3 个方法的使用。 equals() 方法 equals() 方法将逐个地比较两个字符串的每个字符是否相同 。如果两个字符串具有相同的字符和长度,它返回 true,否则返回 false。对于字符的大小写,也在检查的范围之内。equals() 方法的语法格式如下: str1.equals(str2); str1 和 str2 可以是字符串变量, 也可以是字符串字面量。 例如, 下列表达式是合法的: "Hello".equals(greeting) 下面的代码说明了 equals() 方法的使用: String str1 = "abc"; String str2 = new String("abc"); String str3 = "ABC"; System.out.println(str1.equals(str2)); // 输出 true System.out.println(str1.equals(str3)); // 输出 false 在第一次进入系统时要求管理员设置一个密码,出于安全考虑密码需要输入两次,如果两次输入的密码一致才生效,否则提示失败。具体实现代码如下: public static void main(String[] args) { String sys = "学生信息管理"; System.out.println("欢迎进入《" + sys + "》系统"); System.out.println("请设置一个管理员密码:"); Scanner input = new Scanner(System.in); String pass = input.next(); // 设置密码 System.out.println("重复管理员密码:"); input = new Scanner(System.in); String pass1 = input.next(); // 确认密码 if (pass.equals(pass1)) { // 比较两个密码 System.out.println("已生效,请牢记密码:" + pass); } else { System.out.println("两次密码不一致,请重新设置。"); 运行该程序,由于 equals() 方法区分大小写,所以当两次输入的密码完全一致时,equals() 方法返回 true,输出结果如下所示:
欢迎进入《学生信息管理》系统 请设置一个管理员密码: abcdef 重复管理员密码: abcdef 已生效,请牢记密码:abcdef 否则输出如图下所示的结果: 欢迎进入《学生信息管理》系统 请设置一个管理员密码: abcdef 重复管理员密码: aBcdef 两次密码不一致,请重新设置。 equalsIgnoreCase() 方法 equalsIgnoreCase() 方法的作用和语法与 equals() 方法完全相同 ,唯一不同的是 equalsIgnoreCase() 比较时不区分大小写 。当比较两个字符串时,它会认为 A-Z 和 a-z 是一样的。
下面的代码说明了 equalsIgnoreCase() 的使用: String str1 = "abc"; String str2 = "ABC"; System.out.println(str1.equalsIgnoreCase(str2)); // 输出 true 在会员系统中需要输入用户名和密码进行检验,下面使用 equalsIgnoreCase() 方法实现检验登录时不区分用户名和密码的大小写,具体的代码实现如下所示。 public static void main(String[] args) { String sys = "学生信息管理"; System.out.println("欢迎进入《" + sys + "》系统"); System.out.println("请输入管理员名称:"); Scanner input = new Scanner(System.in); String name = input.next(); // 获取用户输入的名称 System.out.println("请输入管理员密码:"); input = new Scanner(System.in); String pass = input.next(); // 获取用户输入的密码 // 比较用户名与密码,注意此处忽略大小写 if (name.equalsIgnoreCase("admin") && pass.equalsIgnoreCase("somboy")) { // 验证 System.out.println("登录成功。"); } else { System.out.println("登录失败。"); 在上述代码中,由于使用 equalsIgnoreCase() 方法进行比较,所以会忽略大小写判断。因此输入 ADMIN 和 SOMBOY 也会验证通过,如下所示: 欢迎进入《学生信息管理》系统 请输入管理员名称: ADMIN 请输入管理员密码: SOMBOY 登录成功。 否则输出结果如下所示: 欢迎进入《学生信息管理》系统 请输入管理员名称: admin 请输入管理员密码: sommboy 登录失败。 equals()与==的比较 理解 equals() 方法和 == 运算符执行的是两个不同的操作是重要的。如同刚才解释的那样,equals() 方法比较字符串对象中的字符。而 == 运算符比较两个对象引用看它们是否引用相同的实例。
下面的程序说明了两个不同的字符串(String)对象是如何能够包含相同字符的,但同时这些对象引用是不相等的: String s1 = "Hello"; String s2 = new String(s1); System.out.println(s1.equals(s2)); // 输出true System.out.println(s1 == s2); // 输出false 变量 s1 指向由“Hello”创建的字符串实例。s2 所指的的对象是以 s1 作为初始化而创建的。因此这两个字符串对象的内容是一样的。但它们是不同的对象,这就意味着 s1 和 s2 没有指向同一的对象,因此它们是不 == 的。
因此,千万不要使用 == 运算符测试字符串的相等性,以免在程序中出现糟糕的 bug。从表面上看,这种 bug 很像随机产生的间歇性错误。
对于习惯使用 C++ 的 String 类的人来说,在进行相等性检测的时候一定要特别小心。C++ 的 String 类重载了 == 运算符以便检测字符串内容的相等性。可惜 Java 没有采用这种方式,它的字符串“看起来、感觉起来”与数值一样,但进行相等性测试时,其操作方式又类似于指针。语言的设计者本应该像对 C++ 那样也进行特殊处理, 即重定义 == 运算符。
当然,每一种语言都会存在一些不太一致的地方。C 程序员从不使用 == 对字符串进行比较,而使用 strcmp 函数。Java 的 compareTo 方法与 strcmp 完全类似。所以下面我们来介绍 Java 的 compareTo 方法。
compareTo() 方法 通常,仅仅知道两个字符串是否相同是不够的。对于排序应用来说,必须知道一个字符串是大于、等于还是小于另一个。一个字符串小于另一个指的是它在字典中先出现。而一个字符串大于另一个指的是它在字典中后出现。字符串(String)的 compareTo() 方法实现了这种功能。
compareTo() 方法用于按字典顺序比较两个字符串的大小,该比较是基于字符串各个字符的 Unicode 值。 compareTo() 方法的语法格式如下: str.compareTo(String otherstr); 它会按字典顺序将 str 表示的字符序列与 otherstr 参数表示的字符序列进行比较。 如果按字典顺序 str 位于 otherster 参数之前,比较结果为一个负整数;如果 str 位于 otherstr 之后,比较结果为一个正整数;如果两个字符串相等,则结果为 0。
提示:如果两个字符串调用 equals() 方法返回 true,那么调用 compareTo() 方法会返回 0。 编写一个简单的 Java 程序,演示 compareTo() 方法比较字符串的用法,以及返回值的区别。代码如下: public static void main(String[] args) { String str = "A"; String str1 = "a"; System.out.println("str=" + str); System.out.println("str1=" + str1); System.out.println("str.compareTo(str1)的结果是:" + str.compareTo(str1)); System.out.println("str1.compareTo(str)的结果是:" + str1.compareTo(str)); System.out.println("str1.compareTo('a')的结果是:" + str1.compareTo("a")); 上述代码定义了两个字符串“A”和“a”,然后调用 compareTo() 方法进行相互比较。最后一行代码拿“a”与“a”进行比较,由于两个字符串相同比较结果为 0。运行后的输出结果如下: str = A str1 = a str.compareTo(str1)的结果是:-32 str1.compareTo(str)的结果是:32 str1.compareTo('a')的结果是:0

关注公众号「 站长严长生 」,在手机上阅读所有教程,随时随地都能学习。本公众号由 C语言中文网站长 亲自运营,长期更新,坚持原创。

微信扫码关注公众号