JAVA——String与StringBuffer以及StringBuilder

来源:互联网 发布:unity3d怎么播放动画 编辑:程序博客网 时间:2024/06/01 20:49

介绍

字符串是用一对双引号括起来的字符序列,在java中,它不像c语言中所用的字符数组,实际上是由String类所实现。每一个字符串将产生一个String类的新的实例。为了高效的处理字符串,java将字符串分为两种:一种是在程序中长度不会被改变的字符串;一种是在程序中长度会被改变的字符串,又称为缓冲字符串。Java环境为了存储和维护这两类字符串提供了String和StringBuffer两个类。

一、String类

String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法。在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。

(1)构造方法主要有:

public String();
//构造一个空字符串对象
public String(byte[] bytes);
//通过byte数组构造字符串对象
public String(char[] bytes,int offset,int count)
public String(char[] value);
//通过char数组构造字符串对象
public String(byte[] char,int offset,int length);
//通过char数组,从offset开始,总共length长的字节构造字符串对象
public String(String original);
//构造一个original的副本,拷贝一个originalString(StringBuffer buffer);//通过StringBuffer数组构造字符串对象

(2)方法主要有:

// 当anObject不为空并且与当前String对象一样,返回true;否则,返回false。这种比较方式大小写敏感。
boolean equals(Object anObject)

String str = “this is a String”;
str.equals(“this is another String”);//result = false;

//将字符号串中第一个oldChar替换成newChar。

String replace(char oldChar, char newChar)

//trim()方法可以将字符串中开头和结尾处的空格去掉

public String trim()

String str1=new String(” “+” This is a man “);
System.out.print( “1”);
System.out.print( str1.trim());
System.out.println( “2”);//结果:1This is a man2
//将该String对象与str连接在一起。用+也行

String concat(String str)

//将字符串转换成小写

String toLowerCase()

//将字符串转换成大写

String toUpperCase()

//可以将任何类型的数据对象转换为一个字符串

static String valueOf(***)

System.out.print(String.valueOf(Math.PI));

//该String对象是否以suffix 结尾。

boolean endsWith(String suffix)

//该String对象是否以prefix开始。

boolean startsWith(String prefix)

//取字符串中的某一个字符,其中的参数index指的是字符串中序数。字符串的序数从0开始到length()-1

char charAt(int index)

String string = “This is a String”;
char ch = string.charAt(3);
System.out.println(ch);//result = s;

/*从这个字符串中的字符复制到目标字符数组要复制的第一个字符在索引srcBegin处,被复制的最后一个字符是在的索引srcEnd1即要复制的字符总数是srcEnd srcBegin处。
字符被复制到子数组的夏令时开始在指数dstBegin和结束于索引:dstbegin + (srcEnd-srcBegin) - 1*/

void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

String string = “This is a String”;
char[] chr = new char[10];
string.getChars(5, 12, chr, 0); System.out.println(chr);//result=is a St

//取从 beginIndex位置开始到endIndex位置的子字符串

String substring(int beginIndex, int endIndex)

二、StringBuffer类

是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象它只能通过构造函数来建立, StringBuffer sb = new StringBuffer();对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.通过它的append方法向其赋值.sb.append("hello");
字符串连接操作中StringBuffer的效率要明显比String高:
String对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.StringBuffer对象实例化后,只对这一个对象操作。

(1)构造方法主要有:

public StringBuffer();
//创建一个空的可变字符串
public StringBuffer(int length);
//创建一个具有指定长度的空可变字符串
public StringBuffer(String str);
//创建一个指定初始值的可变字符串

(2)方法主要有:

public StringBuffer append(boolean b)

//该方法的作用是追加内容到当前StringBuffer对象的末尾,类似于字符串的连接。调用该方法以后,StringBuffer对象的内容也发生改变
例: StringBuffer sb = new StringBuffer(“abc”);
sb.append(true);
则对象sb的值将变成”abctrue”

public StringBuffer insert(int offset, boolean b)

// 该方法的作用是在StringBuffer对象中插入内容,然后形成新的字符串。
例: StringBuffer sb = new StringBuffer(“TestString”);
sb.insert(4,false);
在对象sb的索引值4的位置插入false值,形成新的字符串,则执行以后对象sb的值是”TestfalseString”。

public void setCharAt(int index, char ch)

//该方法的作用是修改对象中索引值为index位置的字符为新的字符ch。
StringBuffer sb = new StringBuffer(“abc”);
sb.setCharAt(1,D’);
则对象sb的值将变成”aDc”。

public StringBuffer reverse()

// 该方法的作用是将StringBuffer对象中的内容反转,然后形成新的字符串。
StringBuffer sb = new StringBuffer(“abc”);
sb.reverse();
经过反转以后,对象sb中的内容将变为”cba”。

public void trimToSize()

//该方法的作用是将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费。

public StringBuffer deleteCharAt(int index)

//该方法的作用是删除指定位置的字符,然后将剩余的内容形成新的字符串。
StringBuffer sb = new StringBuffer(“Test”);
sb. deleteCharAt(1);
//sb的值变为”Tst”。

public StringBuffer delete(int start,int end)

//该方法的作用是删除指定区间以内的所有字符,包含start,不包含end索引值的区间。例如:
StringBuffer sb = new StringBuffer(“TestString”);
sb. delete (1,4);
该代码的作用是删除索引值1(包括)到索引值4(不包括)之间的所有字符,剩余的字符形成新的字符串。则对象sb的值是”TString”。

三、StringBuilder 类

JDK1.5版本以后出现了StringBuilder。
StringBuffer是线程同步
StringBuilder是线程不同步

以后开发,建议使用StringBuilder
升级三个因素:
1、提高效率
2、简化书写
3、提高安全性

0 0