String的注意点
字符串的内容是不会发生改变的,它的对象在创建后不能被更改
string是Java定义好的一个类,定义在java.long包中,所以使用的时候不需要导入包。
Java程序中的所有字符串文字(例如“abcdefg”),都被实为此类的对象
创建String对象
实验得出两种获取得到的abc是不一样的
以后要是想比较字符串里面的内容,就必须用String里面的方法
package stringdemo;
import java.util.Scanner;
public class StringDemo {
public static void main(String[] args) {
//1.定义两个变量记录正确的用户名和密码
String rightUsername = "zhangsan";
String rightPassword = "12346";
Scanner sc = new Scanner(System.in);
//2.键盘录入用户名和密码
for (int i =0 ; i < 3 ; i++) {
System.out.println("请输入用户名");
String username = sc.next();
System.out.println("请输入密码");
String password = sc.next();
//3.比较
if (username.equals(rightUsername) && password.equals(rightPassword)){
System.out.println("用户登录成功");
break;
}else {
if (i == 2) {
//最后一次机会也输入错误,此时账号要提示被锁定
System.out.println("账号"+username+"被锁定请联系XXX进行身份认证");
}else{
System.out.println("用户登录失败,用户名或者密码有误,您还剩下"+(2 - i)+"次机会");
}
}
}
}
}
进行一个身份的登录验证
问题: equals和==是一样的吗
回答:在 Java 等编程语言中,“==” 和 “equals” 方法在比较对象时通常是不一样的。
“==” 用于比较基本数据类型(如整数、浮点数、字符、布尔值等)时,是比较它们的值是否相等。例如,
int a = 5; int b = 5; a == b 会返回 true 。
但当用于比较引用数据类型(如对象)时,“==” 比较的是两个对象的引用是否指向同一个内存地址,而不是比较对象的内容。
String str1 = new String("hello");
String str2 = new String("hello");
str1 == str2 // 返回 false,因为它们是两个不同的对象,内存地址不同
而 “equals” 方法通常用于比较对象的内容是否相等。许多类都重写了 “equals” 方法来实现自定义的对象内容比较逻辑。
例如,对于
String 类,
str1.equals(str2) 会返回
true ,因为它们的内容都是 "hello" 。
不过,需要注意的是,如果自定义类没有重写 “equals” 方法,默认情况下它的行为和 “==” 是类似的,即比较引用。
遍历字符串
需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串
public char charAT(int index):根据索引返回字符
public int length();返回此字符串的长度
数组的长度:数组名.length
字符串的长度:字符串对象.length()
package stringdemo;
import java.util.Scanner;
public class StringDemo1 {
public static void main(String[] args) {
//1.键盘录入一个字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
String str = sc.next();
//进行遍历
for (int i = 0; i < str.length(); i++) {
//i一次表示字符串的每一个索引
char c = str.charAt(i);
System.out.println(c);
}
}
}
练习:键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符)
package stringdemo;
import java.util.Scanner;
public class StringDemo2 {
public static void main(String[] args) {
//键盘录入一个字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
String str = sc.next();
//2.统计 --计数器思想
int bigCount = 0;
int smallCount = 0;
int numberCount = 0;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c >= 'a' && c <= 'z'){
//char类型的变量在参与计算的时候自动类型提升为int,查询ascil码表
smallCount++;
}else if(c >= 'A' && c <= 'Z'){
bigCount++;
}else if (c >= '0' && c <= '9'){
numberCount++;
}
}
//3.输出打印
System.out.println("小写字母有"+ smallCount + "个");
System.out.println("大写字母有"+ smallCount + "个");
System.out.println("数字有"+ smallCount + "个");
}
}
这里面的0~9需要使用字符串的形式‘0’ ‘9’,要不然在ascil表里面会出现编码问题。