equals和 ==的区别
案例:定义一个 Person 类,重写 eqauls 方法用于判断两个person对象的属性是否一致,如果属性一致时equals方法返回true,否则返回false
public boolean equals(Object o) {
// 用来判断调用者和参数是否是相同地址的对象,如果地址一样就证明两个对象是同一个对象
if (this == o) {
return true;
}
// 判断调用和参数是否是由一个字节码文件创建处理的对象,如果不是同一个字节码文件就不可能是同一个
if (o == null || getClass() != o.getClass()) {
return false;
}
// 由同一个字节码文件创建出来的2个地址不同的对象,比较他们的属性值,如果属性值一样返回true,否则返
Person person = (Person) o;
return age == person.age && name.equals(person.name);
}
String类概述
String类代表字符串,是由final修饰的一个类;
Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例;
String描述字符串不变; 它们的值在创建后不能被更改;
构造方法
① String():创建空字符串,就相当于平时定义空字符(String str = "");
② String("abc"):以指定字符串参数创建字符串对象(String str = "abc")
③ String(byte[] byte):使用平台默认的编码表对byte数组进行解码成字符串
④ String(Char[] char):将字符数组拼接成字符串
⑤ 常用第②种方式进行字符串的声明
常用方法
① charAt(int index):返回字符串中指定索引处的字符
② contains(Sting str):判断字符串中是否包含指定子字符串,如果有就返回true,否则返回false
③ endsWith(String str):判断字符串是否以指定的字符串结尾
④ startsWith(String str):判断字符串是否以指定的字符串开头
⑤ equals(String str):比较字符串内容是否一致
⑥ getBytes():将字符串以默认的字符集编码为一个byte数组中
字符串的截取
subString() 方法 -- 前截后不截
① subString(int index):从指定索引处截取字符串后面所有的内容
② subString(int index,int end):截取指定的从 index 到 end 这个范围的字符串
replace() 方法 --- 实现字符串替换
① replace(String str1,String str2):以新的字符串str2替换掉str1
String字符串案例:
小明向南走了100步,再向北走了50步,又向西走了150步,接着向北走了50步,最后向东走了10步;问小明一共走了多少步,向北走了多少步?
public void test_demo(){
String string = "小明向南走了100步,再向北走了50步,又向西走了150步,接着向北走了50步,最后向东走了10步"
// 按照逗号将字符串分割为数组
String[] split = string.split(",");
// 定义两个变量来存储步数
int sum = 0,sum1 = 0;
// 遍历分割后的数组
for(int i = 0;i < split.length ; i++){
// 将每次遍历出来的子串赋值给str变量
String str = split[i];
// 截取每一个子串中步数的数字
String temp = str.substring(str.indexOf('了') + 1, str.indexOf('步'));
// 将字符串的步数转换为整数
int temp1 = Integer.parseInt(temp);
// 总步数
sum += temp1;
// 向北的步数
if(str.indexOf('北') != -1){
sum1 += temp1;
}
}
System.out.println(sum);
System.out.println(sum1);
}
字符串的遍历(将字符串看作是一个字符数组)
public void test_string() {
String string = "www.baidu.com";
for(int i = 0;i < string.length();i ++){
char c = string.charAt(i);
System.out.print(c+" ");
}
}
字符串的拼接(+) --- 不建议使用(StringBuilder/StringBuffer)
public void test_string() {
int[] arr = {1,2,3,4,5,6,7};
String string = "array[";
for(int i = 0;i < arr.length;i ++){
string += arr[i]+",";
}
String substring = string.substring(0, string.length()-1);
System.out.println(substring + "]");
}
字符串的反转 (不建议使用) ---- StringBuilder/StringBuffer中有提供快速反转的方法
public void test_string() {
String string = "abc";
String str = "";
for(int i = string.length() - 1;i >=0 ;i --){
char c = string.charAt(i);
str += c;
}
System.out.println(str);
}
首字母变为大写,其他字母变成小写
public static void main(String[] args){
String str = "i lOvE jAvA";
String s1 = str.toLowerCase();
char c = s1.charAt(0);
String s = String.valueOf(c).toUpperCase();
String new_string = s1.replace(s1.substring(0, 1), s);
System.out.println(new_string);
}
键盘录入2个字符串,查询短字符串在长字符串中出现的索引
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入长字符串:");
String str = scanner.next();
System.out.println("请输入短字符串:");
String substr = scanner.next();
int index = str.indexOf(substr);
while(index != -1){
System.out.println(index);
index = str.indexOf(substr,index+1);
}
}
键盘录入用户和密码,判断录入是否正确
public static void main(String[] args){
int n = 3;
Scanner scanner = new Scanner(System.in);
while(n > 0){
System.out.println("请输入用户名和密码:");
String name = scanner.next();
String pwd = scanner.next();
n--;
if(name.equals("admin") && pwd.equals("123")){
System.out.println("登录成功");
break;
}else{
if(n == 0){
System.out.println("登录机会已用完");
break;
}else{
System.out.println("你还有"+n+"次机会");
}
}
}
}