资讯专栏INFORMATION COLUMN

Java String、StringBuffer和StringBuilder类

Jason / 2301人阅读

摘要:可以调用方法将其转换为一个对象是线程安全的,则没有实现线程安全功能,所以性能略高。通过串联更方便将该对象与的对象进行比较。追加字符串插入替换删除反转输出输出改变的长度,将只保留前面部分

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));    //返回长度差 4
System.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);
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66342.html

相关文章

  • 从字节码角度看StringStringBuffer、StringBuilder的不同

    摘要:官方说明将一个或多个类文件进行分解。显示静态常量为每个类中的方法打印反汇编代码例如字节码指令组成。在结果的行直接进行多次的拼接看看最后编译会是神马的这句话是对应声明了一个,然后每次拼接实际使用的是的方法。 Oracle官方说明: javap 将一个或多个类文件进行分解。 使用简要说明 javap [options] classfile... options 命令行选项,详细查看后面...

    wua_wua2012 评论0 收藏0
  • StringStringBuilder、StringBuffer的爱恨情仇

    摘要:当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用而不用的,就是速度的原因。 第三阶段 JAVA常见对象的学习 StringBuffer和StringBuilder类 (一) StringBuffer类的概述 (1) 基本概述 下文以StringBuffer为例 前面我们用字符串做拼接,比较耗时并且也耗内存(每次都会构造一个新的string对象),而这种拼接操作又...

    stormjun 评论0 收藏0
  • Java学习笔记3-Number,String,StringBuilder

    摘要:创建字符串教程字符串长度用于获取有关对象的信息的方法称为访问器方法。类在中被提出,它和之间的最大不同在于的方法不是线程安全的不能同步访问。然而在应用程序要求线程安全的情况下,则必须使用类。 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte、int、long、double 等。 在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,...

    pkhope 评论0 收藏0
  • Java StringBuilderStringBuffer源码分析

    摘要:是可以序列化的标志。构造器可以看出,默认的容量大小为。不过这个构造器是具有包访问权限,一般情况下是不能调用的。总结和都是可变字符串,前者线程不安全,后者线程安全。和的大部分方法均调用父类的实现。其扩容机制首先是把容量变为原来容量的倍加。 简介 StringBuilder与StringBuffer是两个常用的操作字符串的类。大家都知道,StringBuilder是线程不安全的,而Stri...

    wangbjun 评论0 收藏0
  • 浅谈 Java 字符串(String, StringBuffer, StringBuilder)

    摘要:与类基本相同,都是可变字符换字符串序列,不同点是是线程安全的,是线程不安全的。和区别在大部分情况下是线程安全的可变字符序列。在程序中可将字符串缓冲区安全地用于多线程。 转载自飘过的小牛 我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一、定义 showImg(/...

    ShowerSun 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<