博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java String、StringBuffer和StringBuilder类
阅读量:5780 次
发布时间:2019-06-18

本文共 4841 字,大约阅读时间需要 16 分钟。

String类是不可变类,即一旦一个String对象被创建以后,包括在这个对象中的字符序列是不可改变的,直至这个对象被销毁

StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。可以调用toString()方法将其转换为一个String()对象

StringBuffer是线程安全的,StringBuilder则没有实现线程安全功能,所以性能略高。如果需要创建一个内容可变的字符串对象,则应该优先考虑使用StringBuilder类

在单线程环境下应该使用StringBuilder来保证较好的性能;当需要保证多线程安全时,就应该使用StringBuffer

String、StringBuffer和StringBuilder都实现了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

  • int compareTo (String anotherString ):当前String对象与anotherString比较 。相等返回0;不相等 时,从两个字符串第 0 个字符开始比较,返回第一个不相等的字符差,另一种情况,较长字符串的前面部分恰巧是较短的字符串,返回它们的长度差

    String a1 = new String("abcdefghijklmn");String a2 = new String("abcdefghij");String a3 = new String("abcdefghijalmn");System.out.println("a1.compareTo(a2):"+a1.compareTo(a2));    //返回长度差 4System.out.println("a1.compareTo(a3):"+a1.compareTo(a3));    //返回'k'-'a'的差 10
  • String concat(String str):将该String对象与str 连接在一起。通过“+”串联更方便

  • 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):返回该字符串是否以suffix结尾

    String f1 = "www.ishuhui.com";String f2= "com";System.out.println("f1.endsWith(f2):" + f1.endsWith(f2));        //true
  • boolean equals(Object anObject):当anObject不为空并且与当前String对象一样,返回 true;否则,返回 false

  • boolean equalsIgnoreCase(String string):比较字符串与another是否一样(忽略大小写)

  • byte[] getBytes(String charsetName):将该String对象转换成byte数组

  • byte[] getBytes(Charset charset):使用指定字符集,将该String对象转换成byte数组

  • byte[] getBytes():将该String对象转换成byte数组,使用默认字符集

  • void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):将字符串中从srcBegin开始,到srcEnd结束的字符负责到dst字符数组中,其中dstBegin为目标字符数组的起始复制位置

    char[] c1 = {'L','I','N',' ','B','o','K','a','i'};String s8 = new String("Me ");s8.getChars(0, 3, c1, 0);System.out.println(c1);
  • int hashCode ():返回当前字符的哈希表码

  • int indexOf(int c):找出c字符在该字符串中第一次出现的位置

  • int indexOf(int c, int fromIndex):找出c字符在该字符串中从fromIndex开始后第一次出现的位置

  • int indexOf(String substr):找出substr子字符串在该字符串中第一次出现的位置

  • int indexOf(String substr, int fromIndex):找出substr子字符串中从fromIndex开始后在该字符串中第一次出现的位置

  • boolean isEmpty():如果字符串的长度为0,则返回 true

  • int lastindexOf(int c):找出c字符在该字符串中最后一次出现的位置

  • int lastindexOf(int c, int fromIndex):找出c字符在该字符串中从fromIndex开始后最后一次出现的位置

  • int lastindexOf(String substr):找出substr子字符串在该字符串中最后一次出现的位置

  • int lastindexOf(String substr, int fromIndex):找出substr子字符串中从fromIndex开始后在该字符串中最后一次出现的位置

  • int length():返回字符串的字符个数

  • String replace(char oldChar, char newChar):将字符串中的第一个oldChar替换成newChar

  • boolean startsWith(String prefix):该String对象是否以prefix开始

  • boolean startsWith(String prefix, int toffset):该String对象从toffse 位置算起,是否以 prefix开始

  • String substring(int beginIndex):取从beginIndex位置开始到结束的子字符串

  • String substring(int beginIndex, int endIndex)取从beginIndex位置开始到endIndex位置结束的子字符串

  • char[] toCharArray():将该String对象转换成char数组

  • String toLowerCase():将字符串转换成小写

  • String toUpperCase():将字符串转换成大写

  • String trim():移除字符串中的空格

  • static String valueOf(X x):将基本类型值转换成字符串的方法

String类是不可变的,String的实例一旦生成就不会再改变

String str1 = "java";str1 = str1 + "struts";str1 = str1 + "spring";

上面程序除了使用了3个字符串直接量之外,还会额外生成2个字符串直接量"javastruts"和"javastrutsspring",程序中的str1依次指向3个不同的字符串对象

因为String是不可变的,所以会产生很多临时变量,使用StringBuffer和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        // 改变StringBuilder的长度,将只保留前面部分        sb.setLength(5); // sb="avajo"        System.out.println(sb);    }}

转载地址:http://fouyx.baihongyu.com/

你可能感兴趣的文章
CSS居中
查看>>
One Person Game(概率+数学)
查看>>
CodeForces 258B Little Elephant and Elections :于1-m中找出七个数,使六个数里面的4和7个数比第七个数严格小:数位dp+dfs...
查看>>
MAP
查看>>
手把手教你测——上网快鸟
查看>>
用javascript获取地址栏参数
查看>>
一起谈.NET技术,你应该知道的15个Silverlight诀窍
查看>>
商教助手!解析夏普液晶高清宽屏投影机系列
查看>>
云南去年有望实现151万贫困人口净脱贫
查看>>
Java架构师面试题系列整理(大全)
查看>>
延伸产业链 中国产粮大省向“精深”问发展
查看>>
消费贷用户70%月收入低于5000元 80、90后是主要人群
查看>>
2018年内蒙古外贸首次突破1000亿元
查看>>
CTOR有助于BCH石墨烯技术更上一层楼
查看>>
被遗忘的CSS
查看>>
Webpack中的sourcemap以及如何在生产和开发环境中合理的设置sourcemap的类型
查看>>
做完小程序项目、老板给我加了6k薪资~
查看>>
java工程师linux命令,这篇文章就够了
查看>>
关于React生命周期的学习
查看>>
webpack雪碧图生成
查看>>