String
String类
创建
- String s = new String(“abc”);
- char a[]={‘a’,’b’,’c’};String s = new String(a);
- char a[]={‘a’,’b’,’c’};String s =new String(a,2,4)
字符串连接+
- 创建新的对象、增加内存开销
- 变化的string不推荐会用+操作
是不可变的对象
- 使用final 关键字修饰的字符数组
- 是线程安全的
字符串方法
- 获取长度 length()
- 定位字符串开始位置indexOf()
- 最后一个 lastIndexOF()
- 取字符 charAt(index)
- 获取(begin,end-1)的子字符串 substring(begin,end)
- 以某个字符开始 starsWith
- 以某个字符结束 endsWith
- 全部转为大写 toUpperCase
- 全部转为小写 toLowerCase
- 字符串内容相等 equals
- 字典序比较 compareTo
- 字符串分割(支持正则表达式) split()
- 字符串格式化 format(“xx%”,Object)
- 日期时间格式化
- 字符串替换 replace()
正则表达式
- 非[^456]
- 任意一个 [a~r]
- 任意字母[a-zA-Z]
- 或(并运算)[a-e[g-z]]
- 交运算[a-o&&[def]]
- 差运算[a-d&&[^bc]]
可变的String对象
StringBuffer
- 可以更改,可以替代Sring类
- 一般生产环境中都用StringBuffer,确保线程安全
- new StringBuffer(“chen”)
- 添加字符串 append(“robin”)
- 输出 chenrobin
- length()
- 长度 9
- 翻转 reverse
- 输出 nibornehc
- 插入 insert(4,”word”)
- 输出 niborWang
- setLength(3)
- nib
- delete(5,10)
StringBuilder
- 不会增加内存开销
- 单线程,大量数据时,使用StringBuilder速度更快
- append(“aa”)
- insert(5,”word”)
- delete(5,10)
- reverse()
- setLength()
区别
- 有公共的父类AbstractStringBuilder抽象类
- StringBuilder并未对方法添加同步锁,线程不安全的
- Stringbuffer添加了同步锁,或对调用的方法添加了同步锁,线程安全的
实现原理
- 提高字符串连接效率
- 采用一个char数组保存字符串,初始大小16
- append动态扩容
- 每次固定扩容2倍,JNI方法System.arraycopy()