Java基础(三十四)String、StringBuffer类和数据缓冲区Buffer类
一、String类
1.创建字符串对象
创建字符串对象有两种方法:直接用“=”或者使用“new String(...)”
String aStr = "TMZ"; String bStr = new String("TMZ"); String nullStr = ""; String nullStr_1 = new String(); String nullStr_2 = new String("");
2.连接字符串
使用“+”运算符可以连接字符串。字符串可以和任意类型的数据进行字符串连接操作,若该数据为基本类型,则会自动转换为字符串;若为引用类型,则会自动调用所引对象的toString()方法获得一个字符串,然后再进行字符串的连接操作。
System.out.println("TMZ" + 1996); //TMZ1996 System.out.println("10" + 7.5F); //107.5 System.out.println("TMZ" + true); //TMZtrue System.out.println("TMZ" + "SJY"); //TMZSJY System.out.println("SJY" + "TMZ"); //SJYTMZ
在判断是字符串连接符还是加法运算符时,按照先左后右的顺序,根据运算符两边的类型来决定是进行加法运算还是进行字符串连接。
System.out.println("TMZ" + 1996 + 2.2); //TMZ19962.2 System.out.println(1996 + 2.2 + "TMZ"); //1998.2TMZ
3.字符串操作
(1)比较字符串
equals():区分字母大小写 equalIgnoreCase():不区分大小写 startWith(String prefix):判断字符串是否以prefix字符串开始 endsWith(String prefix):判断字符串是否以prefix字符串结束 startWith(String prefix, int offset):判断字符串是否从第offset起始位置以prefix字符串开始 compareTo(): 比较两个字符串,大于返回一个正数,小于返回一个负数,相等返回0
(2)获取字符串的长度:str.length()
(3)字符串的大小写转换:str.toLowerCase(); str.toUpperCase();
(4)查找字符串
(1)indexOf(int ch):用于获取指定字符在原字符串中第一次出现的索引。 (2)lastIndexOf (int ch):用于获取指定字符在原字符串中最后一次出现的索引。 (3)indexOf(String str):用于获取指定字符串在原字符串中第一次出现的索引。 (4)lastIndexOf(String str):用于获取指定字符在原字符串中最后一次出现的索引。 (5)indexOf(int ch, int startIndex):用于获取指定字符在原字符串中指定索引位置开始第一次出现的索引。 (6)lastIndexOf (int ch, int startIndex):用于获取指定字符在原字符串中指定索引位置开始最后一次出现的索引。 (7)indexOf(String str, int startIndex):用于获取指定字符串在原字符串中指定索引位置开始第一次出现的索引。 (8)lastIndexOf(String str, int startIndex):用于获取指定字符在原字符串中指定索引位置开始最后一次出现的索引。
(5)从现有字符串中截取子字符串
public String substring(int beginIndex) public String substring(int beginIndex, int endIndex)
(6)去掉字符串的首位空格
public String trim()
(7)替换字符串中的字符或子串
public String replace(char oldChar, char newChar):替换所有字符 public String replaceAll(String regex, String replacement):替换所有子字符串 public String replaceFirst(String regex, String replacement):替换第一个子字符串
(8)分割字符串
public String[] split(String regex, int limit) regex:表示分割规则 limit:表示分割规则的应用次数,如果limit>0,则得到的String数组的长度不会大于limit limit为0时,String数组中位于最后的所有空字符串元素将被丢弃,等价于public String[] split(String regex)
4.格式化字符串
(1)两种format方法
public static String format(String format, Object... args) // 依据本地的语言环境进行格式化 public static String format(Locale locate, String format, Object... args) // 依据设定的语言环境locate进行格式化
5.对象的字符串表示
(1)如果用来构建对象的类中没有toString方法,那么就调用默认的Object类中的toString()方法返回“包名.类名@内存的引用地址”
(2)如果用来构建对象的类中实现了toString()方法,那么就使用这个对象调用这个toString()方法并返回“包名.类名@对象.toString()”
二、StringBuffer类
StringBuffer类和String类都是用来代表字符串的,但是它们的内部实现方式不同。String类创建的字符串对象是不可修改的,也就是说,String字符串不能修改、删除或替换字符串中的某个字符。而StringBuffer类创建的字符串对象是可以修改的。
1.StringBuffer的初始化
StringBuffer s = new StringBuffer(); //初始化的StringBuffer对象是一个空对象 StringBuffer s = new StringBuffer("123"); //初始化的StringBuffer对象不是一个空对象
2.StringBuffer构造方法
StringBuffer() // 分配给该对象的初始容量可以容纳16个字符。当该对象的实体存放的字符序列的长度大于16时,实体的容量自动增加,以便存放所有增加的字符。 StringBuffer(int size) //分配给该对象的初始容量可以容纳16个字符。当该对象的实体存放的字符序列的长度大于16时,实体的容量自动增加,以便存放所有增加的字符。 StringBuffer(String s) //分配给该对象的初始容量为参数字符串s的长度额外在增加16个字符。
3.常用方法
(1)追加字符串
使用append方法可以将其他Java类型数据转化为字符串后,再追加到StringBuffer对象中。 StringBuffer append(String s):将一个字符串对象追加到当前StringBuffer对象中,并返回当前StringBuffer对象的引用。 StringBuffer append(int n):将一个int型数据转化为字符串对象后再追加到当前StringBuffer对象中,并返回当前StringBuffer对象的引用。 StringBuffer append(Object o):将一个Object对象o的字符串表示追加到当前StringBuffer对象中,并返回当前StringBuffer对象的引用。 类似的方法还有: StringBuffer append(boolean b)
StringBuffer append(char c)
StringBuffer append(long n)
StringBuffer append(float f)
StringBuffer append(double d)
(2)获取单个字符或设置指定字符
public char charAt(int n)
// charAt(int n)用来获取参数n指定位置上的单个字符。字符串序列从0开始,即当前对象实体中n的值必须是非负的,并且小于当前对象实体中字符串的序列长度。
public void setCharAt(int n,char ch)
// 用来将当前StringBuffer对象实体中的字符对象位置n处的字符用参数ch指定的字符替换。n的值必须是非负的,并且小于当前对象实体中字符串序列的长度。
(3)插入字符串
StringBuffer insert(int index,String str) // 将参数str指定的字符串插入到参数index的位置,并返回当前对象的引用。
(4)反转字符串
public StringBuffer reverse() // StringBuffer对象使用reverse()方法将该对象实体中的字符翻转,并返回当前对象的引用
(5)删除子字符串或字符
StringBuffer delete(int startIndex,int endIndex) // 用于删除子字符串。参数startIndex指定需删除的第一个字符的下标,而endIndex指定了需删除的最后一个字符的下一个字符的下标。
// 因此要删除的子字符串是从startIndex位置开始到endIndex-1的位置结束。
deleteCharAt(int index)方法删除当前StringBuffer对象实体的字符串中在index位置的字符。
(6)替换子字符串或字符
StringBuffer replace(int startIndex,int endIndex,String str) // 将当前StringBuffer对象实体中的字符串的一个子字符串用参数str指定的字符串替换。
// 被替换的子字符串由下标startIndex和endIndex指定,即从starIndex到endIndex-1的字符串被替换。该方法返回当前StringBuffer对象的引用。
三、数据缓冲区
数据缓冲区是由具有相同类型的数值构成的数组,Buffer类是一个抽象类,它的子类包括:ByteBuffer、CharBuffer、DoubleBuffer、IntBuffer、LongBuffer和ShortBuffer。
注意:StringBuffer类与这些缓冲区没有关系。
最常使用的是ByteBuffer和CharBuffer类,每个缓冲区的的特征是:
- 一个容量,它永远不能改变。
- 一个读写位置,下一个值将在此进行读写。
- 一个界限,超过它进行读写是没有意义的。
- 一个可选的标记,用于重复一个读入或读写操作。
这些值满足下面的条件:0≤标记≤读写位置≤界限≤容量。
常用方法:
Buffer clear():将位置复位到0,并将界限设置到容量,使这个缓冲区为写出做好准备 Buffer flip():将界限设置到位置,将位置复位到0,使这个缓冲区为读入做好准备 Buffer rewind():将读写位置复位到0,并保持界限不变,使这个缓冲区为重新读入相同的值做好准备 Buffer mark():将这个缓冲区的标记设置到读写位置 Buffer reset():将这个缓冲区的位置设置到标记,从而允许被标记的部分可以再次被读入或写出 int remaining():返回剩余可读写或可写出值的数量,即界限与位置之间的差异 int capacity():返回这个缓冲区的容量 int position():返回这个缓冲区的位置