——- android培训、java培训、期待与您交流! ———-
String
特点:
1.字符串对象一旦被初始化就不能改变。
2.String类加载时,会在内存中开辟缓冲区(字符串常量池),当通过String s = "sting";
方式创建字符串对象时,会将创建的字符串存储在字符串常量池中,下次通过此方式创建字符串时,会首先在常量池中查找,如果有就直接使用,没有才创建。而通过String s = new String("string");
创建的对象会存储在堆内存中,此方式会创建两个字符串,一个存储在队中,而构造方法中传递的参数也是一个字符串,并且会存储在字符串常量池中。所以:
JVM中一块独立的区域存放字符串常量和基本类型常量(public static final)
String s = "string";
String s1 = "string";
String s2 = new String("string");
s == s1;//true
s == s2;//false
s.equals(s2);//true
String类提供了多个构造方法,可以通过byte数组,char数组,StringBuffer对象,StringBuilder对象,String对象作为参数创建字符串。
String类提供了许多操作字符串的方法,常用方法有:
char charAt(int index)//取字符串中指定位置的字符,index从0开始计算。
String concat(String str)//连接字符串,等同于 “+”;
boolean contentEquals(StringBuffer buffer)//若二者包含的字符序列相同时就返回true;
boolean equals(Object obj)//将该字符串与指定对象比较,若二者包含的字符序列相等返回true;
boolean equalsIgnoreCase(String anotherString)//将此 String 与另一个 String 比较,不考虑大小写;
byte[] getBytes()//将该字符串转换成byte数组;
int indexOf(String str)//找出str字符串在该字符串中第一次出现的位置;
int indexOf(String str, int fromIndex)//返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始;
int lastIndexOf(String str)//返回指定子字符串在此字符串中最后一次出现处的索引;
int length()//返回当前字符串长度;
String replace(char oldChar, char newChar)//返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
String replaceAll(String regex, String replacement)//使用给定的 字符串replacement 替换此字符串所有的regex字符串;
boolean startsWith(String prefix)//测试此字符串是否以指定的前缀开始.
String[] split(String regex)//把字符串按指定的字符串分隔开。
String substring(int beginIndex)//返回一个新的字符串,从beginIndex开始截取,它是此字符串的一个子字符串;
String substring(int beginIndex, int endIndex)//返回一个新字符串,它是此字符串的一个子字符串;
char[] toCharArray()//将此字符串转换为一个新的字符数组。
String toLowerCase()//将此 String 中的所有字符都转换为小写;
String toUpperCase()//转成大写;
static String valueOf(基本类型 obj)//把基本类型值转成字符串;
String trim()//忽略字符串前导空白和尾部空白。
StringBuffer:线程安全的可变字符序列。
一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。
特点:
1.长度可变
2.可以存储不同类型的数据
3.最终要转成字符串进行使用
构造方法
StringBuffer()
构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
StringBuffer(CharSequence seq)
构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符。
StringBuffer(int capacity)
构造一个不带字符,但具有指定初始容量的字符串缓冲区。
StringBuffer(String str)
构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
当容量不足是会自动增加,为提高效率,当容量确定是可使用第三个构造方法。
常用操作:
添加:
append(参数列表)
在末尾添加内容
insert(参数列表)
在中间添加内容
删除:
StringBuffer delete(int start, int end)
移除此序列的子字符串中的字符。
StringBuffer deleteCharAt(int index)
移除此序列指定位置的 char。
查找:
charAt(int index)
返回此序列中指定索引处的 char 值。
indexOf(String str, int fromIndex)
从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。
lastIndexOf(String str, int fromIndex)
返回最后一次出现的指定子字符串在此字符串中的索引。
修改:
StringBuffer replace(int start, int end, String str)
使用给定 String 中的字符替换此序列的子字符串中的字符。
setCharAt(int index, char ch)
将给定索引处的字符设置为 ch。
其他:
setLength(int newLength)
设置字符序列的长度。
Buffer reverse()
将此字符序列用其反转形式取代。
StringBuilder(public final class StringBuilderextends Objectimplements Serializable, CharSequence)
一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
将 StringBuilder 的实例用于多个线程是不安全的。 如果实例只用于一个线程,建议用StringBuilder。如果需要这样的同步,则建议使用 StringBuffer。
用法和StringBuffer相同。