01,String 概述和特点
预习:
字符串特点
1,字符串是String类的实例,String中包含了很多关于字符串的方法
2,字符串不能被改变,但是可以被共享
什么是共享,Python中好像也有共享
3,字符串实际上是一个字符数组
底层是使用字符数组实现的
用处:
1,字符串的处理方法,都用来干什么? -->正则表达式用来做爬虫或者数据分析
应该和正则一起学习,完成一个爬虫或者聊天机器人的功能
学习路线
1,创造字符串
2,使用字符串的方法
探索练习
1,字符串为什么不能改变
上面其实改变的是s1这个变量引用,引用的地址指向了另一个字符串"xyz"
字符串都是对象
特点:
1,一旦创建不会改变(内存示意图,本质上仅仅是变量指向了新的字符串)
2,字符串是可以共享的
3,字符串与其字符串数组等效,底层就是用字符数组实现的,(JDK9之后开始使用字节数组了)
细节:
在创建字符串的时候,会先去检查内存中是否存在这个对象,如果有就共享
02,String 构造方法
构造方法:
1,new String(); --> 相当于创建了""一个空字符串
2,new String(char[ ])
3,new String(byte[ ])
细节:
1,""与null的区别
内存中解释,一个有引用,是""; 后者是没有引用
03,String 判断方法 equals equalsIgnoreCase
细节:
1, == 与 equals的区别
前者是比较变量的值
后者比较的是引用中的值
==: 基本类型是比较的数据的值,引用类型比较的是地址值
04,String 构造方法创建和直接创建字符串的区别
有区别吗?
问题:
1,既然Java有缓冲字符串的作用,如何验证一下呢?
两个变量都指向相同的字符串内容,测试是否有相同的地址值
的确是有区别的
直接创建字符串会先检查缓存中是否有相同的字符串,没有才会创建,有的会就会将变量指向内存中那变量
构造方法创建字符串都会创建字符串
官方回答:
1,构造方法方式,每次创建字符串都是创建一个新的对象
2,直接赋值创建字符串每创建一个变量,都指向同一字符串
05,String 获取方法 length concat
长度: length,因为本质上就是一个数组,字符数组
中文字符串的长度
注意: length()是方法,数组的length是属性
拼接:
xxx.concat("yyy")
注意: 一旦创建,不会改变,xxx在拼接之后没有改变,这个方法返回了新的字符串
和"+"有什么区别
+和concat的区别:
1,+可以连接null, concat不可以
2,一个+就创建一个StringBuilder对象
06,String 获取方法 charAt indexOf
charAt: 索引位置上的值
indexOf: 指定字符在字符串第一次出现的位置
如果是多个字符,那么就是首位字符首次在字符串中出现的位置(前提是包含整个目标字符)
如果没有找到,就返回-1
区别:
指定位置,获取内容
指定内容,获取位置,返回首次首位出现的位置,没有找到就返回-1
07,String 获取方法 subString
截取子字符串:
subString(beginning): [ ]
subString(beginning,endding): [开始,结束),
注意: 截取字符串返回的才是效果
技巧: [开始,length),这里不会越界
08,String 转换方法 toCharArray getBytes
获取字符数组: toCharArray()
返回char[ ]
String(char[ ])
获取字节数组: getBytes
返回byte[ ]
String(byte[ ])
09,String 转换方法 replace
替换字符串中的字符:
replace(target,replacement): 前面是被替换的目标字符,后面是替换成的字符
用后者换前者
作用: 替换全部,例如在敏感词屏蔽中可以替换掉敏感词
10,String 分割方法 split
分割字符串: 根据指定的分隔符拆分字符串,返回字符串数组
分隔符会被去掉,保留其他部分到字符串数组中
11,String 分割方法 split 特殊的符号
特殊的分隔符: . 表示任意符号
split使用点号"."就会将任意字符都当做分隔符
12,String 练习
13,static 概述
类变量: 使用static修饰的成员变量,被所有对象共享
静态方法: 使用static修饰的成员方法,不用创建对象即可使用
14,static 修饰成员变量 类变量 被共享
使用场景:
多个变量共享的变量使用共享的
好处: 省内存
15,static 修饰成员方法 静态方法 类名调用
使用场景:
好处: 类名调用
工具类的工具方法
为什么不把所有方法都写成静态的?
静态方法无法访问普通成员变量,只能访问静态变量
静态方法只能访问静态成员(变量或方法)
注意:
静态访问中不能有this
16,static 修饰代码块 静态代码块 了解
是什么?
语法格式:
static{
执行语句;
}
写在成员位置
作用:
随着类的加载而执行,优先与main方法
类中只能用于定义属性和方法,不能用于执行,执行写在静态代码块或者方法里面
17,Arrays 静态方法和Collections的静态方法
Arrays:操作数组的工具类
成员方法:
toString
sort
Collections:
sort: 给集合排序
reverse: 反转
18,Math 静态方法
Math: 数学计算的工具类
静态方法:
绝对值:abs
向上取整: 省略小数变整数ceil
向下取整: 省略小数变整数floor
四舍五入: round(负数看绝对值来进行四舍五入,然后添加负号)
19,API查询方法
20,方法总结
ArrayList
add
remove
set
get
size
constains
String
判断
equals
equalsIgnoreCase
获取
length
concat
charAt
indexOf
subString
转换
toCharArray()
getBytes()
replace()
分割
split()
Scanner
nextint()
next()
nextDouble
Arrays
toString()
sort()
Collections
sort()
reverse()
Math
Random
nextInt()