一、今日重点
- String
- 比较字符串
- 获取字符串长度
- 获取指定位置下标的字符
- 查找字符(串)位置
- 截取字符(串)
- 包装器类型(包装类,封装类)
二、进程概括
【√代表掌握了,-代表产生困惑但已解决,×代表没解决】
- 比较String s1 = "abcdefg";与String s2 = new String("abcdefg");的区别【√】
- equals方法比较字符串内容【√】
- length方法获取字符串长度【√】
- 查找字符串位置【√】
- 练习:统计一个字符串在另一个字符串中出现的次数【√】
- 截取字符串【√】
- 练习:键盘上输入身份证号,获得性别,生日【√】
- 转大写、小写、判断开头结尾、去空格、根据指定的字符分割【√】
- 字符串的替换【√】
- 字符串与数据类型转换【√】
- 包装器类型(包装类,封装类)【√】
- 异常【√】
- 讲解昨天作业【√】
三、今日知识
String s1 = "abcdefg";
String既然是一个类,s1应该叫做String类的对象
类如果要创建对象,new,s1并没有new,s1也可以叫做对象
String s2 = new String("abcdefg");
s2是通过new创建出来的String类的对象
创建对象是要调用构造器
- s1指向的abcdefg和s2指向的abcdefg不在同一个区域内
System.out.println(s1 == s2); System.out.println(s2 == s3); System.out.println(s1 == s4);
- 双等号比较的是虚地址
- 虚地址:对象在内存中的存储位置
- new代表新建
- =赋值,无论怎么比较,都是true
- new赋值,用双等号比较,就是false
- equals方法比较字符串内容
1.需要传参,传String类型的参数
2.有返回值是boolean类型
3.访问权限public
- length方法获取字符串长度
1.不需要传参
2.有返回值,整型int
3.访问权限public
- 面试题
- 字符串获取长度的方法和数组获取长度有什么区别?
答:数组的length是属性,字符串的length()是方法
- 获取指定位置下标的字符
String s1 = "abcdefg"; System.out.println(s1.charAt(0));
- 查找字符串中字符位置
- 判断指定字符串是否存在,返回值为字符串在s1的下标
- 返回从左到右遇到的第一个匹配的下标
- 如果不存在。返回-1
- indexOf(String,int)代表从int位置开始查找,包括当前位置
String s1 = "abcdefgabcdaaa"; s1.indexOf('a'); System.out.println(s1.indexOf("a",8));
- 从后往前查找
String s1 = "abcdefgabcdaaa"; s1.indexOf('a'); System.out.println(s1.lastIndexOf("a",12));
- 字符串的截取
- 如果传一个参数,从指定位置开始截取,直到字符串的末尾
- 包括起始位置的字符
- 生成一个新的字符串,不会改变原有数据
String str = "abcdefghijklmn"; String s = str.substring(1); System.out.println(s);
- 传两个参数,包含起始位置,不包含终止位置
String str = "abcdefghijklmn"; s = str.substring(1,2); System.out.println(s);
- 下面所有的方法都是返回一个新的字符串
- 转大写
System.out.println(str.toUpperCase());
- 转小写
System.out.println(str.toLowerCase());
- 判断是否以xxxx开头、偏移两位
System.out.println(str.startsWith("a",2));
- 判断是否以xxxx结尾
System.out.println(str.endsWith("F"));
- 忽略大小写进行比较内容
System.out.println(str.equalsIgnoreCase(str1));
- 去掉字符串前后的空格
System.out.println(str1.trim());
- 根据指定的字符分割,分割之后,分割条件是消失
String str2 = "123,456,789,00"; String [] strings = str2.split(","); System.out.println(Arrays.toString(strings));
- 字符串的替换
String str = "hello"; System.out.println(str.replace('e', 'c')); System.out.println(str.replaceAll("l", "i"));
- 字符串和其他数据类型的转换
int i = 10; String s = String.valueOf(i);
- 字符串和数组的转换
- 数组转字符串
int [] arr = new int[]{1,2,3,4,5};
- 字符串转数组
- 转成字符型数组
char[] array = str.toCharArray();
- 转成字节型数组
(一般情况下,字节型数组在操作文件的时候常用的IO流)
byte[] bytes = str.getBytes();
- 包装器类型(包装类,封装类)
byte -- Byte
short -- Short
int -- Integer
long -- Long
float -- Float
double -- Double
char -- Character
boolean -- Boolean
- 原理
- 自动装箱:把int类型包装成了包装器Integer类型
基本数据类型转换成对应的包装器类型
Integer i1 = 20;
- 自动拆箱:把Integer类型转换int类型
包装器类型转换成对应的基本数据类型
int ii = i2;
- JDK5之后的新功能:
1.自动装箱和自动拆箱 2.增强for循环(foreach) 3.枚举
- JDK7以后的新功能:
1.switch...case 可以用String
- 异常
1.数组下标越界
2.内存溢出
3.空指针
4.字符串下标越界
5.数字格式化
四、练习汇总
- 统计一个字符串在另一个字符串中出现的次数
- 第一种(for循环)
for (int i = 0; i < s1.length(); i++) { if(s1.charAt(i) == target){ count++; } } System.out.println(target + "在" + s1 + "中出现了" + count + "次!");
- 第二种(while循环+面向对象·封装方法)
public int sum(String target,String str) { int count = 0; int i = 0; while(i < str.length()) { int i1 = str.indexOf(target,i); if(i1 != -1){ count++; i = i1 + 1; } else { i++; } } return count; }
- 键盘上输入身份证号,获得性别,生日。
public class Ch06_Demo { public String getGender(String cardId){ String gender = "男"; int genderNum =cardId.charAt(16); if(genderNum % 2 == 0){ gender = "女"; } return gender; } public String getBirthday(String cardId) { return cardId.substring(6, 14); } public static void main(String[] args) { Ch06_Demo c = new Ch06_Demo(); Scanner sc = new Scanner(System.in); System.out.println("请输入身份证号:"); String cardId = sc.next(); if(cardId.length() == 18) { System.out.println("身份证号为:" + cardId + ",生日:" + c.getBirthday(cardId) + ",性别:" + c.getGender(cardId)); }else{ System.out.println("输入有误,请重新输入!"); } } }
五、学习心得
- 今天的新内容相对比较简单,是对字符串的各种操作,以及封装类。难度不高,只是需要记忆。
- 并且讲解了前一天的项目,通过讲解之前不理解的地方也都有了新的思路,老师的项目总是比我们的可读性更高,更容易看理解原理,减少了很多冗余。
- 加油,再接再厉。希望我们能沿着阶梯一步一步到达新的目的地。

浙公网安备 33010602011771号