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

来源:互联网 发布:ftp阿里云服务器配置 编辑:程序博客网 时间:2024/06/14 00:10

——- 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;//trues == s2;//falses.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相同。

0 0
原创粉丝点击