基于API的类的学习day02
String类 - 字符串
1.特点:
a.字符串就是字符序列,本质上就是一个字符数组
b.String类是final修饰的,不可被继承的
c.String一旦创建就不可修改,属于不可变的字符序列
d.String重写了toString()
2.创建方式
a.直接创建
String str = “”;
b.构造方法创建
String()
String(byte[] bytes)
String(byte[] bytes, Charset charset)
String(char[] value)
String(String original)
3.常量池
a.常量池中放的都是常量
b.只要直接赋值的字符串,都指向常量池
4.内存编码问题
1)编码方式:
UniCode字符集 -> jvm识别
1字符 = 2字节
操作系统识别的编码方式: GBK UTF-8 ASCII ISO8859-1
UTF-8 -> 1字符 = 3字节
GBK -> 1字符 = 2字节
2)编码: 字符 -> 字节
API:
byte[] str.getBytes() -> 默认方式
byte[] str.getBytes(“GBK”) -> 指定方式
3)解码: 字节 -> 字符
构造方法:
new String(byte[],“GBK”)
new String(byte[])
4)乱码问题:
a.产生原因:
如果以gbk的方式编码得到的数组,然后以UTF-8的方式进行解码,就会出现乱码问题
b.解决乱码:
1.按照错误的方式进行编码
2.得到字节数组,在重新解码
5.常用API:
char charAt(int index)
String concat(String str)
boolean contains(CharSequence s)
boolean endsWith(String suffix)
boolean equalsIgnoreCase(String anotherString)
int indexOf(String str)
boolean isEmpty()
int lastIndexOf(String str)
int length()
String replace(char oldChar, char newChar)
boolean startsWith(String prefix)
String substring(int beginIndex)
char[] toCharArray()
String toLowerCase()
String toUpperCase()
String trim()
static String valueOf(Object obj)
6.正则表达式 - 字符串的一些排列规则
常用标识符:
边界匹配器:
开头: 以 '^'开头
结尾: 以 美元符号结尾
字符类:
[ ]:表示一个字符的位置
[abc]:可以出现a,或者可以出现b,或者可以出现c
[a-zA-Z]:所有的字母,包括大小写
[ ]: 在[]中不需要添加\表示转义
Greedy 数量词:
/+ -> 1 或 n
/? -> 0 或 1
/* -> 0 或 n
{n} -> 刚好出现n次
{n,} -> 至少出现n次
{n,m} -> 最少出现n次,最多出现m次
预定义字符类:
. 表示所有字符
\d 表示[0-9]
\w 表示[a-z0-9A-Z_]
转义字符:
. 表示.本身
\ 表示\本身
\r
\t
\n
正则表达式常用API:
String replaceAll(String regex, String replacement)
boolean matches(String regex)
String[] split(String regex)
StringBuilder 和 StringBuffer
1.StringBuilder 和 StringBuffer都是属于可变长字符串[在改变字符串的时候,不会产生新的对象]
2.创建:
new StringBuilder()
new StringBuilder(“String”)
3.常用API:
StringBuilder append(Object obj) - 追加
StringBuilder delete(int start, int end) - 删除
StringBuilder insert(int offset, boolean b) - 插入
StringBuilder replace(int start, int end, String str) - 替换
StringBuilder reverse() - 反转
4.区别:
a.版本:
StringBuilder -> JDK1.5
StringBuffer -> JDK1.0
b.线程安全
StringBuilder: 线程不安全,效率高
StringBuffer: 线程安全,效率低
c.使用环境:
操作少量的数据使用 String
单线程环境下大量数据使用 StringBuilder
多线程环境下大量数据使用 StringBuffer
d.效率对比
String < StringBuffer < StringBuilder
5.面试题:
阐述String 和 StringBuffer 和StringBuilder的区别