20220720 第五小组 罗大禹 学习笔记
20220720 第五小组 罗大禹 学习笔记
Java String类方法及包装器
学习重点
1.String类的方法
2.包装器
学习心得
老师上午讲的String类的方法我感觉很好理解,下午讲的包装器有点没有弄懂,需要自己看看视频或者问问同学来弄懂,最后做的练习没有跟上老师的思路,需要自己回去看老师的代码理解理解
学习内容
String字符串(理解)
String字符串
String是一个类
类中可以有哪些结构?
属性 方法 构造器
String是不是也有属性 方法 构造器?
是
String一旦声明,不可改变!!!(内存级别)
举例说明:
public class Ch01 {
public static void main(String[] args) {
//String既然是一个类,s1应该叫做String类的对象
//类如果要创建对象,是需要new的,s1并没有new,为什么是s1也可以叫对象?
String s1="abcdefg";
//s2是通过new创建出来的String类的对象
//而创建对象时需要构造器的
String s2=new String("abcdefg");
String s3=new String("abcdefg");
String s4="abcdefg";
//双等号比较的是虚地址
//虚地址:对象在内存中的储存位置
System.out.println(s1==s2);
//new代表新建,是存在堆里的,每new一个就会新建一个,因此虚地址是不同的
System.out.println(s3 == s2);
//常量会存在方法区里,内容相同的话地址就会相同
System.out.println(s1 == s4);
/*
等号赋值,若内容相同,无论怎么比较,都是true
new用双等号比较,无论内容是否相同,结果都是false;
*/
}
}
String类的方法
1. equals方法:比较字符串的内容
- 需要传参,传一个String类型的参数
- 是具有返回值的,返回值类型为boolean类型
- 访问权限public
举例说明
import java.util.Scanner;
public class Ch02 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入字符串1");
String s3 = sc.next();
System.out.println("请输入字符串2");
String s4 = sc.next();
System.out.println(s3==s4);
System.out.println(s3.equals(s4));
}
}
2. length方法:字符串的长度
字符串是字符拼接起来的,因此是有长度的,长度为字符的个数
- 不需要传参
- 有返回值,返回值的类型为整型int
- 访问权限public
字符串获取长度的方法和数组获取长度有什么区别?
数组的length是属性,而字符串的length()是方法
举例说明
public class Ch03 {
public static void main(String[] args) {
String s1="aa";
//是有下标的
System.out.println(s1.length());
}
}
3. charAt方法:取出指定下标位置的字符
String既然有长度,那就有下标。
与数组相同,可能会出现下标越界的异常
举例说明
import java.util.Scanner;
public class Ch04 {
public static void main(String[] args) {
String s1="abcd";
System.out.println(s1.charAt(0));
Scanner sc=new Scanner(System.in);
//取出输入的字符串的第一个字符,将其赋值给char类型的c
char c = sc.next().charAt(0);
}
}
4. indexOf方法:判断指定字符是否存在
- 有返回值,返回值为字符在字符串中的下标
- 返回从左到有右遇到的第一个匹配的下标
- 如果不存在,则返回-1
package com.morning;
public class Ch05 {
public static void main(String[] args) {
String s1="abcdefgaaa";
//indexOf(String , int)代表从int位置开始查找(包括int),遇到String返回下标
System.out.println(s1.indexOf("a",1));
//从后往前找
System.out.println(s1.lastIndexOf("a",6));
}
}
5.substring方法:字符串的截取
需要传参(参数为字符串的下标),若只输入一个数字,则从指定位置开始截取,直到字符串的末尾(包含起始位置)
若输入两个数字,则从第一个数字开始截取到第二个数字结束(包含起始位置,不包含终止位置)
该方法会生成一个新的字符串,不会改变原有数据
举例说明:
package com.morning;
public class Ch06 {
public static void main(String[] args) {
String str ="abcdefghijklmn";
String s =str.substring(1,3);
System.out.println(str);
//会输出bc
System.out.println(s);
}
}
6.字符串和数组的转换
举例说明:
public class Ch02 {
public static void main(String[] args) {
//1.数组转字符串(在此不多讲,将数组遍历,然后放进String)
//2.字符串转数组
//1.toCharArray方法:转成字符型数组
//将字符串中的每个字符分别存入char类型的数组中
String str ="abcdefg";
char[] array = str.toCharArray();
//2.getBytes方法:转成字节型数组(输出的为ASC码)
//一般情况下,字节型数组在操作文件的时候会用
byte []bytes=str.getBytes();
for (byte b : bytes) {
System.out.println(b);
}
//3.字符串和其它数据类型的转换
int i =10;
//把int类型转成字符串
//任何数据类型和字符串类型做加法,结果都是字符串
//不推荐使用(阿里公约不允许)
String s=i+"";
//推荐使用
String s1 = String.valueOf(i);
}
}
7.其余方法
String类还有许多方法,不在多说,一下举例说明几个方法
下面所有的方法都是返回一个新的字符串
举例说明:
import java.util.Arrays;
import java.util.Locale;
public class Ch08 {
public static void main(String[] args) {
String str = "abcdefgc";
//1.toUpperCase方法:字母转大写(不需要传参)
String str1=str.toUpperCase(Locale.ROOT);
//2.toLowerCase方法:字母转小写(不需要传参)
System.out.println(str.toLowerCase(Locale.ROOT));
//3.equalsIgnoreCase方法:忽略大小写比较内容(有返回值,返回值类型为boolean)
System.out.println(str.equalsIgnoreCase(str1));
//4.startsWith方法:判断是否以xxx开头(有返回值,返回值类型为boolean)
//判断是否以a开头,从下标为1的位置开始
System.out.println(str.startsWith("a",1));
//5.endsWith方法:判读是否以xxx结尾(需要传参)
System.out.println(str.endsWith("a"));
String str2 = " ABCDEFG ";
//6.trim方法:去字符串前后的空格(不需要传参)
System.out.println(str2.trim());
String str3="123,456,789,00";
//7.split方法:根据指定的字符分割,分割之后,分割条件会消失(需要传参)
String[] strings = str3.split(",");
System.out.println(Arrays.toString(strings));
//8.replace方法:字符串的替换
//会将找到的字符全部替换
//将str中全部的c替换成l
System.out.println(str.replace('c', 'l'));
}
}
包装器(了解)
包装器类型(包装类,封装类):
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
为什么要有包装器类型???
场景:
员工管理系统
员工:年龄 薪水
计算总工资、平均年龄,若值为0的话会被计算,null不会。
public class Ch03 {
public static void main(String[] args) {
int i = 10;
Integer i1 = 10;
//原理:
//自动装箱:把int类型包装成了包装器Integer类型
//基本数据类型转换成对应的包装器类型
Integer i2 = Integer.valueOf(30);//过时了
//Integer i2 =30;
//自动拆箱:把Integer类型转换成int类型
//包装器类型转换成对应的基本数据类型
int ii =i2.intValue() ;//过时了
//int ii =i2;
}
}
新功能
JDK5之后的新功能:
- 自动装箱和自动拆箱
- 增强for循环(foreach)
- 枚举
JDK7之后的新功能
- switch...case 可以用String
目前遇到过的异常
- 数组下标越界
- 内存溢出
- 空指针
- 字符串下标越界
- 数字格式化