您的位置:首页 > 职场人生

黑马程序员----字符串

2015-06-10 21:21 399 查看
——- 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相同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string 程序员