Java String | xiaxyun

Java String

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()

本文标题:Java String

文章作者:Xiaxyun

发布时间:2019年08月28日 - 19:08

最后更新:2019年08月28日 - 20:08

原始链接:https://xiaxyun.github.io/2019/08/28/Java-String/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------