zi

Java-0006-String、StringBuffer、St

2016-07-15  本文已影响27人  云转水流

2016.7.14

String   字符串常量

String是一个对象不是基本类型

是不可变对象,一旦创建就不能修改它的值

对于已存在的String对象操作都是创建一个新的String,并赋值新的值

String、StringBuffer和StringBuilder都是final类,不能被继承

而String的各种拼接操作都是通过StringBuffer来完成的

String s = "Hello";//s引用静态区的字符串字面量

String s = new String("Hello");//s引用堆上的字符串对象

创建,拼接

(+),concat

索引

indexOf、lastIndexOf

以开头/结尾

startsWith、endWith

获取指定位置的字符

charAt()

获取子字符串

substring(int,int)

比较

equals(String)和compareTo(String)

匹配

indexOf(String)和lastIndexOf(String)

修减两边空白

trim()

替换

replace(String,String)和replaceAll(String,String)

拆分

split(String)

StringBuffer和StringBuilder字符串变量

//更快,比String快几百至几千倍

StringBuffer//适用于多个线程操作同一个字符串的场景

StringBuilder//适用于单线程环境

//StringBuilder更快

StringBuffer 

//线程安全,需同步,可能会需要等待

是一个可变对象,对它修改是不会创建新的对象

它只能通过构造函数创建,不能赋值

创建后内存会分配给它内存空间,并初始保存一个null

想要赋值是可以用它的append()方法

内存空间--字符串缓冲区,若溢出Java将自动扩充

StringBuffer sb = new StringBuffer();

sb.append("hello");

也可以构造时传入初始值

StringBuffer sb = new StringBuffer("hello");

StringBuffer比String高效的原因,

String str = new String("hello");

str+="hi";

的操作步骤实际上是创建一个StringBuffer,然后调用append方法,再调用toString方法赋值给str

String比StringBuffer多了很多附加步骤,所以很慢

StringBuilder

//线程不安全,不需同步,不需要等待,会比StringBuffer更快

StringBuilder与StringBuffer相似

该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。

//在指定位置插入字符串

insert(int ,String)

//删除指定位置字符串

delete(int ,int)

//倒转

reverse()

一个完整的Unicode字符叫代码点CodePoint,而一个Java char叫代码单元code unit。如果String 对象以UTF-16保存 Unicode 字符,需要用2个字符表示一个超大字符集的汉字,这这种表示方式称之为 Surrogate,第一个字符叫Surrogate High,第二个就是Surrogate Low。

代码点(Code Point)就是指Unicode中为字符分配的编号,一个字符只占一个代码点,例如我们说到字符“汉”,它的代码点是U+6C49.代码单元(Code Unit)则是针对编码方法而言,它指的是编码方法中对一个字符编码以后所占的最小存储单元。 例如UTF-8中,代码单元是一个字节,因为一个字符可以被编码为1个,2个或者3个4个字节;在UTF-16中,代码单元变成了两个字节(就是一个 char),因为一个字符可以被编码为1个或2个char(你找不到比一个char还小的UTF-16编码的字符,嘿嘿)。说得再罗嗦一点,一个字符,仅仅对应一个代码点,但却可能有多个代码单元(即可能被编码为2个char)。

//上面这段是copy来的,还不是很理解

//追加

append(String)

System.currentTimeMilis//当前时间

字符串操作注意

toCharArray()

可以将一个字符串返回成一个字符数组,配合for循环可以很好的操作字符

replace(String,String)、replaceFirst(String,String)、replaceAll(String,String)

则3个可以用来替换字符串,其中replaceFirst(String,String)、replaceAll(String,String)第一个参数的String并不是一般的字符串,它需要转义来通过正则表达式

例如你想匹配一个"+",你就需要输入"+"的转义字符"\+",但"\"也是需要转义的,就变成了"\\+"

split(String)

拆分函数的参数也需要转义

另外拆分完的数组也很有趣,例如String[ ] arr = str.split(word);

当str和word字符串内容相同时,arr.length为0

当str比word长,并且str以word结尾时,arr.length为1

但当str比word长,并且str以word开头时,arr.length为2


上一篇下一篇

猜你喜欢

热点阅读