字符串内容的比较方法:
如果是使用==比较,那么是进行地址值的相同判断;
如果就是希望进行字符串内容比较,则需要使用String当中的成员方法:
- public boolean(Object obj):进行字符串的内容比较,严格区分大小写,obj是另一个对象。
Object也是一种类型,可以接收任何类型的数据。 - public boolean equalsIgnoreCase(String str):进行字符串的内容比较,忽略大小写
注意事项:
1.想要进行字符串内容的比较,一定要使用equals方法,不要使用==比较。
2.equals方法具有对称性,a.equals(b)和b.equals(a)效果一样。
3.小技巧:如果equals方法需要比较的两个字符串中,有一个是常量,那么尽量将常量写在前面。
调用方法时,对象名当中如果存储的是null值,那么将会发生空指针异常
java.lang.NullPointerException
4.直接写上双引号就是字符串对象,所以用双引号直接点儿也能调用方法
public class StringEquals {
public static void main(String[] args) {
char[] array = { 'a', 'b', 'c' };
String str1 = new String(array);
String str2 = "abc";
System.out.println(str1 == str2); // false
// 进行字符串内容比较。用equals方法
// 拿着str1跟str2进行内容比较
boolean same = str1.equals(str2);
System.out.println(same); // true
System.out.println(str2.equals(str1)); // true
// 跟任意常量比较,推荐常量在前
String str3 = null;
System.out.println("abc".equals(str3)); // false,推荐
// System.out.println(str3.equals("abc")); //错误写法,空指针异常
String str4 = "Hello";
String str5 = "hello";
System.out.println(str4.equals(str5)); //false
System.out.println("Hello".equalsIgnoreCase(str5));//true
System.out.println(str4.equalsIgnoreCase(str5)); //true
}
}
使用String当中的equals和equalsIgnoreCase两个方法,来模拟一个简单的登录场景。
分析:
1.登录名需要用户名和密码两个信息,也就是两个字符串。
2.用户名和密码应该使用键盘输入,获取两个字符串。(使用scanner)
3.怎样才算是登录成功?注册的时候提前写好正确的用户名、密码
4.判断输入的用户名和密码,与正确的用户名、密码必须完全一样
A用户名必须正确
B.密码必须正确
A和B是“并且”关系,逻辑运算符&&
5.判断一下登录是否成功:if
6.如果登录成功,显示欢迎信息,如果登录失败就退出系统
public class Login {
public static void main(String[] args) {
// 注册用户名和密码
String registname = "admin";
String registpassword = "123456";
// 键盘输入两个字符串
Scanner sc = new Scanner(System.in);
System.out.println("输入用户名:");
String inputname = sc.next();
System.out.println("请输入密码:");
String inputpassword = sc.next();
// 判断条件
// A.输入的用户名和注册时候的正确用户名必须一样(用户名不区分大小写)
// equalsIgnoreCase
// B.输入的密码和注册时候密码判断用:equals
if (inputname.equalsIgnoreCase(registname) && inputpassword.equals(registpassword)) {
System.out.println("欢迎登陆");
} else {
System.out.println("登陆失败,退出");
}
}
}
在刚才登陆的代码当中,加入重试三次的功能。
分析:重复三次的逻辑,应该使用循环,次数确定用for循环,不确定用while。
需要在错误的时候,显示剩余多少次的提示
如果成功了,那么显示欢迎信息,并且退出系统
public class LoginRetry {
public static void main(String[] args) {
// 注册用户名和密码
String registname = "admin";
String registpassword = "123456";
// 键盘输入两个字符串
Scanner sc = new Scanner(System.in);
for (int i = 1; i <= 3; i++) {
System.out.println("输入用户名:");
String inputname = sc.next();
System.out.println("请输入密码:");
String inputpassword = sc.next();
if (inputname.equalsIgnoreCase(registname) && inputpassword.equals(registpassword)) {
System.out.println("欢迎登陆");
break; // 成功,不再循环,应该退出循环
} else {
if (i == 3) {//如果是最后一次
System.out.println("次数用尽。系统退出。");
break;
}else {//如果不是最后一次
System.out.println("登陆失败,剩余次数:" + (3 - i) + "次。请重试。");
}
}
}
}
}