Java基础类库——String、StringBuffer和StringBuilder类
来源:互联网 发布:软件外包公司管理制度 编辑:程序博客网 时间:2024/05/22 06:33
字符串就是一连串的字符序列,Java提供了String和StringBuffer两个类来封装字符串,并提供了一系列方法来操作字符串对象。
String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直到这个对象被销毁。
StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象。
JDK1.5又新增了一个StringBuilder类,它也代表字符串对象。实际上StringBuilder和StringBuffer基本相似,两个类的构造器和方法也基本相同。不同的是,StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。因此在通常情况下,如果需要创建一个内容可变的字符串对象,则应该优先考虑使用StringBuilder类。
提示:String、StringBuilder、StringBuffer都实现了CharSequence接口,因此CharSequence可认为是一个字符串的协议接口。
String类提供了大量构造器来创建String对象,其中如下几个有特殊用途。
- String():创建一个包含0个字符串序列的String对象(并不是返回null)。
- String(byte[]bytes,Charset charset):使用指定的字符集将指定的byte[]数组解码成一个新的String对象。
- String(byte[]bytes,int offset,int length):使用平台的默认字符集将指定的byte[]数组从offset开始、长度为length的子数组解码成一个新的String对象。
- String(byte[]bytes,int offset,int length,String charsetName):使用指定的字符集将指定的byte[]数组从offset开始、长度为length的子数组解码成一个新的String对象。
- String(byte[]bytes,String charsetName):使用指定的字符集将指定的byte[]数组解码成一个新的String对象。
- String(char[]value,int offset,int count):将指定的字符数组从offset开始、长度为count字符元素连缀成字符串。
- String(String original):根据字符串直接量来创建一个String对象,也就是说,新创建的String对象是该参数字符串的副本。
- String(StringBuffer buffer):根据StringBuffer对象来创建对应的String对象。
- String(StringBuilder builder):根据StringBuilder对象来创建对应的String对象。
- char charAt(int index):获取字符串中指定位置的字符。其中,参数index指的是字符串的序数,字符串的序数从0开始到length()-1。如下代码
String s=new String("fkit.org");
System.out.println("s.charAt(5):"+s.charAt(5));//结果为 s.charAt(5):o
- int compareTo(String anotherString):比较两个字符串的大小。如果两个字符串的字符序列相等,则返回0;不相等时,从两个字符串第0个字符开始比较,返回第一个不相等的字符差。另一种情况,较长字符串的前面部分恰巧是较短的字符串,则返回它们的长度差。
String s1=new String("abcdefghijklmn");String s2=new String("abcdefghij");String s3=new String("abcdefghijalmn");System.out.println("s1.compareTo(s2):"+s1.compareTo(s2));//返回长度差 结果为 s1.compareTo(s2):4System.out.println("s1.compareTo(s3):"+s1.compareTo(s3));//返回‘k'-'a'的差 结果为 s1.compareTo(s3):10
- String concat(String str):将该String对象与str连接在一起。与Java提供的字符串连接运算符“+”的功能相同。
- boolean contentEquals(StringBuffer sb):将该String对象与StringBuffer对象sb进行比较,当它们包含的字符序列相同时返回true。
- static String copyValueOf(char[] data):将字符数组连缀成字符串,与String(char[] content)构造器的功能相同。
- static String copyValueOf(char[] data,int offset,int count):将char数组的子数组中的元素连缀成字符串,与String(char[] value,int offset,int count)构造器的功能相同。
- boolean endsWith(String suffix):返回该String对象是否以suffix结尾。
String s1="fkit.org";String s2=".org";System.out.println("s1.endsWith(s2):"+s1.endsWith(s2));//结果为true
- boolean equals(Object anObject):将该字符串与指定对象比较,如果二者包含的字符序列相等,则返回true;否则返回false。
- boolean equalsIgnoreCase(String str):与前一个方法基本相似,只是忽略字符的大小写。
- byte[] getBytes():将该String对象转换成byte数组。
- void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin):将该方法与字符串中从srcBegin开始到srcEnd结束的字符复制到dst字符数组中,其中dstBegin为目标字符数组的起始复制位置。
char[] s1={'I',' ','l','o','v','e',' 'j','a','v','a'};//s1=I love javaString s2=new String("ejb");s2.getChars(0,3.s1.7);//s1=I love ejbaSystem.out.println(s1);
- int indexOf(int ch):找出ch字符在该字符串中第一次出现的位置。
- int indexOf(int ch,int fromIndex):找出ch字符在该字符串中从fromIndex开始后第一次出现的位置。
- int indexOf(String str):找出str子字符串在该字符串中第一次出现的位置。
- int indexOf(String str,int fromIndex):找出str子字符串在该字符串中从fromIndex开始后第一次出现的位置。
String s="www.fkit.org";String ss="it";System.out.println("s.indexOf('r'):"+s.indexOf('r'));//10System.out.println("s.indexOf('r',2):"+s.indexOf('r',2));//10System.out.println("s.indexOf(ss):"+s.indexOf(ss));//6
- int lastIndexOf(int ch):找出ch字符在该字符串中最后一次出现的位置。
- int lastIndexOf(int ch,int fromIndex):找出ch字符在该字符串中从fromIndex开始后最后一次出现的位置。
- int lastIndexOf(String str):找出str子字符串在该字符串中最后一次出现的位置。
- int lastIndexOf(String str,int fromIndex):找出str子字符串在该字符串中从fromIndex开始后最后一次出现的位置。
- int length():返回当前字符串长度。
- String replace(char oldChar,char newChar):将字符串中的第一个oldChar替换成newChar。
- boolean startsWith(String prefix):该String对象是否以prefix开始。
- boolean startsWith(String prefix,int toffset):该String对象从toffset位置算起,是否以prefix开始。
String s="www.fkit.org";String ss="www";String sss="fkit";System.out.println("s.startsWith(ss):"+s.startsWith(ss));//trueSystem.out.println("s.startsWith(sss,4):"+s.startsWith(sss,4));//true
- String substring(int beginIndex):获取从beginIndex位置开始到结束的子字符串。
- String subString(int beginIndex,int endIndex):获取从beginIndex(包括)开始位置到endIndex(不包括)位置的子字符串。
- char[] toCharArray():将该String对象转换成char数组。
- String toLowerCase():将字符串转换成小写。
- String toUppererCase():将字符串转换成大写。
- static String valueOf(X x):一系列用于将基本类型值转换为String对象的方法。
详细内容可查看API
因为String是不可变的,所以会额外产生很多临时变量,使用StringBuffer或StringBuilder就可以避免这个问题。
StringBuilder提供了一系列插入、追加、改变该字符串里包含的字符序列的方法。而StringBuffer与其用法完全相同,只是StringBuffer是线程安全的。
StringBuffer和StringBuilder有两个属性:length和capacity,其中length属性表示其包含的字符序列的长度。与String对象的length不同的是,StringBuilder、StringBuffer的length是可以改变的,可以通过length()、setLength(int len)方法来访问和修改其字符序列的长度。capacity属性表示StringBuilder的容量,capacity通常比length大,程序通常无需关心capacity属性。如下程序师范StringBuilder类的用法。
public class StringBuilderTest{ public static void main(String[]args) { StringBuilder sb=new StringBuilder(); //追加字符串 sb.append("java");//sb="java" //插入 sb.insert(0,"hello ");//sb="hello java" //替换 sb.replace(5,6,",");//sb="hello,java" //删除 sb.delete(5,6);//sb="hellojava" System.out.println(sb); sb.reverse();//反转sb="avajolleh" System.out.println(sb); System.out.println(sb.length());//输出9 System.out.println(sb.capacity());//输出16 sb.setLength(5);//sb="avajo System.out.println(sb); }}详细内容可查看API
- Java基础类库——String、StringBuffer和StringBuilder类
- Java基础学习(三)—String类型,StringBuffer,StringBuilder类
- 黑马程序员——Java基础——String类、StringBuffer和StringBuilder
- java基础——String,StringBuffer和StringBuilder
- Java基础——String、StringBuffer、StringBuilder
- java基础 之 String类 StringBuffer StringBuilder
- Java String类、StringBuffer和StringBuilder类
- Java 常用类String、StringBuffer和StringBuilder
- java基础知识—String、StringBuffer和StringBuilder
- java基础02 String、StringBuffer和StringBuilder
- Java基础回顾 : String、StringBuffer和StringBuilder
- Java基础:StringBuilder、StringBuffer和String
- 【Java基础】StringBuffer 和 StringBuilder 类
- java——StringBuffer和StringBuilder类
- String、StringBuffer和StringBuilder类
- String、StringBuffer和StringBuilder类
- String、StringBuffer和StringBuilder类
- Java基础——String,Stringbuffer,StringBuilder与其他常用类
- 浅谈强联通分量,双联通分量
- 计算机网络学习(1)
- 【Spring】配置数据库资源
- Ubuntu14.04 PostgreSQL卸载又重装后遇到的问题及解决方法
- 使用JDBCTemplate实现与Spring结合,方法公用
- Java基础类库——String、StringBuffer和StringBuilder类
- MySQL Group Replication 同步 or 异步?
- JNI实战一:向Native层传递一个类,并从Native层返回一个类
- 关于在做Java项目的时候如何把第三方的jar包一起打包成jar文件
- Android apk运行时错误java.lang.NoSuchMethodError: com.google.gson.GsonBuilder.setLenient
- ScrllView嵌套RecycleView时ScrllView不随着RecycleView滑动解决方案
- InnoSetup 打包文件夹的解决方案
- 在unity的游戏视图中使用gizmos工具
- PAT 1004. 成绩排名 (20) —— Java