Java基础—Day20
今日内容:
- String & StringBuilder &StringBuffffer
- File类
- IO流 - part1
1.String
要求:
- 常用方法,必须熟练掌握
- 涉及到的面试,要能答出一二
1.1 使用层面
练习:
自己键盘输入或者给定一个文件名
/
邮箱,判断其是否符合规范:
小练习
1.
判断
.java
文件是否符合命名规范,条件
: 23.w.java -> 23-w-java
①
必须以
.java
结尾
;
②
文件名不能为空 至少这种格式
1.java
③
不能包含
@
这种特殊符号
符合规范后,将字符串用
.
切割,切割后,使用
-
将结果重新整合起来,并打印输出
小练习
2
:简单判断邮箱是否合法
12334@qq.com 1111@qqq.com.cn9
①
最后一个
@
后面,必须有
.
,至少
1
个
,
且第一个
.
前面至少
2
个字符
;
②
邮箱名至少
3
个字符;
③
邮箱名不能以
@
开头
@1111@qqq.com.cn ×
1.2 理论层面
- 字面量赋值和new赋值,如何存
字面量赋值,是放在常量池,在jdk8之后,将常量池这个区域放到堆中去了!JDK8之前,它是单独的区域!!!在常量池中的数据,主要是共享!!共享单车那个指定区域就是一个池!!!资源共享、方便维护和管理,资源需要你去创建、维护?!!! ----》 有很多池化思想!
new的方式:必然要在堆中开辟一个区域!!
小面试题: String str = "123";和String str3 = new String("123"); 的比较!!!!String str3 = new String("123"); 有可能1个也有可能2个!!!! - 字符串中如何存储值的?使用的是 private final char value[ ] ,所以我们又称字符串是不可变的,它的不可变体现在数组的地址不可变!!! str+= ,前面一直这么写,实际上走的是 SB ,走的SB的拼接
- 字面量赋值跟构造方法赋值的区别?
- 常量拼接跟变量拼接有什么区别?
常量在池,变量在堆!!
String str5 = str0 + "3" ; 是变量跟常量拼接,断点跟进去看到的效果是进入 StringBuilder中,在这个SB 中完成拼接操作!!发现 SB 中的 char[] value ; 说明地址值可以修改!!拼接完之后,将新的结果赋值给新变量的!!!
2.两个SB
若要经常进行字符串的拼接,即要修改字符串的值,我们使用两个
SB
去实现!!!
两个
SB
有啥区别呢?
StringBuilder 和 StringBuffer
1.
联系:
- 都是可变字符串;
- 使用方式,即方法调用,几乎一样
2.
在多线程情况下,建议使用
StringBuffer
3.File类
操作文件或文件夹,使用 Java 去完成文件或文件夹的管理!!!!都用一个类 File
这个就是一个使用层面,你的方法熟不熟!!!!
需求:创建一个文件夹,在这个文件中下创建文件夹或者文件,查看该文件夹或者文件的一些信息!比
如文件夹:名称、路径【相对路径和绝对,在
windows
下,绝对就是带盘符】、大小
......
test:
4.IO流
字节流:InputStream、OutputStream
字符流:Reader、Writer
上述四个 抽象基类 ,我们学习 IO 流就是研究上述四个基类的具体实现类如何使用!!!!!
输入和输出,对应的就是我们的读和写!!!
- 从内存的这个角度看:打开文件----》输入,保存文件----》输出
- 操作的单位:字节流--操作任意类型的文件【文本文件+二进制文件】、字符流
作业
1.过滤敏感字符
输入一个身份证号,判断长度是否合法
18
位【搞个
6
位测试】,出生年份,必须在
[1910,2028]
范围之间,将出生的日期0923
替换成
****
,否则给出对应的提示信息 ,先打印出替换后的,再逆序输出原串
2.统计字符个数
需求:键盘录入一个字符串,统计字符串中大小写字母及数字字符个数,若拿到其他字符则提示:
“
该字符”+
除了上述之外其他的字符
+“
非法
” ,toCharArray
3.文件复制-1
使用字节输入流和输出流,实现大视频的复制,计算耗时,一次读写一个字节!!!!