Java学习手册:String&StringBuffer&StringBuilder&StringTokenizer

版权声明:本文为博主原创文章,未经博主允许不得转载,转载请务必注明出处: https://blog.csdn.net/MaybeForever/article/details/89222766

Java语言有4个类可以对字符或字符串进行操作,它们分别是CharacterStringStringBufferStringTokenizer,其中Character用于单个字符操作,String用于字符串操作,属于不可变类,而StringBuffer也是用于字符串操作,不同之处是StringBuffer属于可变类。

一、String类的常用方法

char charAt(int index)//查看当前字符串给定位置的字符
int length()//返回当前字符串的字符数量
int indexOf(String str)//查看给定字符串在当前字符串中的位置。若有,则返回给定字符串的第一个字符在当前字符串中的下标位置,若没有则返回-1
int lastIndexOf(String str)//查看给定字符串在当前字符串中最后一次出现的位置
//注:Java API通常使用2个数字表示范围的时候,都是含头不含尾
String subString(int start, int end)//截取字符串(含头不含尾)
String subString(int start)//从给定位置开始一直截取到字符串末尾
String trim()//去除当前字符串两边的空白
boolean startsWith(String str)//判断当前字符串是否以给定的字符串起始
boolean endsWith(String str)//判断当前字符串是否以给定的字符串结尾
String toUpperCase()//将当前字符串的英文部分转换为全大写
String toLowerCase()//将当前字符串的英文部分转换为全小写
static String valueOf()//该方法用若干重载,用于将其他类型转换为字符串

二、StringBuffer

StringBuffer,缓冲区,本身也是字符串,但是与String不同,StringBuffer是可以更改的,StringBuffer是一个操作类,所以必须通过实例化进行操作。

StringBuffer类的常用的方法

append(char c)
insert()
replace()
indexOf()
delete(int start,int end)
deleteCharAt(int index)
setCharAt(int index,char ch)
reverse()

三、String与StringBuffer

String是不可变类,也就是说,String对象一旦被创建,其值将不能被改变,而StringBuffer是可变类,当对象被创建后仍然可以对其值进行修改。由于String是可不可变类,因此适合在需要被共享的场合使用,而当一个字符串经常需要被修改时,最好使用StringBuffer来实现。如果用String来保存一个经常被修改的字符串时,在字符串被修改时会比StringBuffer多很多附加的操作,同时生成很多无用的对象,由于这些无用的对象会被垃圾回收器回收,因此会影响程序的性能。

String与StringBuffer的另外一个区别在于当实例化String时,可以利用构造函数(String s = new String(“Hello”);)的方式来对其进行初始化,也可以用赋值(String s = “Hello”;)的方式来初始化,而StringBuffer只能使用构造函数(StringBuffer s = new StringBuffer(“Hello”);)的方式来初始化。

StringBuffer类和String类的对比:
(1)String类表示的字符串是常量,一旦创建后,内容和长度都是无法改变的。而StringBuffer表示字符容器,其内容和长度可以随时修改。在操作字符串时,如果该字符串仅用于表示数据类型,则使用String类即可。但是如果需要对字符串中的字符进行增删操作,则使用StringBuffer类。
(2)String类覆盖了Object类的equals()方法,而StringBuffer类没有覆盖Object类的equals()方法。
(3)String类对象可以用操作符“+”进行连接,而StringBuffer类对象之间不能。

String字符串修改实现的原理如下:当用String类型来对字符串进行修改时,其实现方法是首先创建一个StringBuffer,其次调用StringBuffer的append()方法,最后调用StringBuffer的toString()方法把结果返回。

String s = "Hello";
s += "World";//1
//代码1等价于如下代码①②③:
StringBuffer sb = new StringBuffer(s);//①
s.append("World");//②
s = sb.toString();//③

四、StringBuilder

StringBuilder是一个可变的字符序列,该类被设计用作StringBuffer的一个简易替换。用在字符串缓冲区被单个线程使用的时候,建议优先考虑该类,速度比StringBuffer要快。但是如果设计到线程安全方面,建议使用StringBuffer。

StringBuilder类的常用方法

//StringBuilder内部维护一个可变的字符数组,该类用于修改字符串
toString()//获取内部表示的字符串
append(String str)//向当前字符串末尾追加给定字符串内容,返回值就是当前String Builder对象
insert(int dstOffset, String s)//插入字符串
delete(int start, int end)//删除字符串
replace(int start, int end, String str)//替换字符串
reverse()//反转字符串

五、StringBuffer与StringBuilder

——StringBuffer是线程安全的,同步处理的,性能稍慢
——StringBuilder是非线程安全的,并发处理的,性能稍快

StringBuilder也是可以被修改的字符串,它与StringBuffer类似,都是字符串缓冲区,但StringBuilder不是线程安全的,如果只是在单线程中使用字符串缓冲区,那么StringBuilder的效率会更高。因此在只有单线程访问时可以使用StringBuilder,当有多个线程访问时,最好使用线程安全的StringBuffer。因为StringBuffer必要时可以对这些方法进行同步,所以任意实例上的所有操作就好像是以串行发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。

扫描二维码关注公众号,回复: 6017306 查看本文章

六、String、StringBuffer与StringBuilder

在执行效率方面,StringBuilder最高,StringBuffer次之,String最低。因此,一般而言,如果要操作的数据量比较小,应优先使用String类;如果是在单线程下操作大量数据,应优先使用StringBuider类;如果是在多线程下操作大量数据,应优先考虑StringBuffer类。

七、StringTokenizer

StringTokenizer是用来分割字符串的工具类,示例如下:

package com.haobi;

import java.util.StringTokenizer;

/*
 * StringTokenizer示例
 */
public class Test {
	public static void main(String[] args) {
		StringTokenizer st = new StringTokenizer("Hello World !");
		while(st.hasMoreTokens()) {
			System.out.println(st.nextToken());
		}
	}
}
//程序输出结果如下:
Hello
World
!

猜你喜欢

转载自blog.csdn.net/MaybeForever/article/details/89222766