java字符串对象
java提供对字符串对的操作有String,StringBuffer, StringBuilder。它们分别以不同的方式提供对字符串各方面的操作。
1. String
string 是开发中最常用到的类,它带表下个字符串,保存存储在常量池的常量的地址引用。如下:
String str=”abc”;
abc就存储在常量池里,str就保存着常量池的”abc”的地址引用。
String str1=”abc”;
Boolean=str==str1;//返回true
因为str和str1都指向了字符串常量池中的”abc”的地址引用。所以它们比较回返回true,这也证明了常量池中的常量不会重复。如果常量池中已有该常量,那么直接引用,否则添加之。
String a=”bcd”;
String b=new String(“bcd”);
Boolean c=a==b;//返回false
因为a保存的是常量池中bcd的地址引用,而b存储着对象String的地址在堆内存中的引用。他们的引用地址不相同,所以它们比较回的就是fasle。
Boolean c=b.equals(a);返回的是Strue;
因为它们通过对象的equals方法比较的是两个变量都指向常量池中同一个引用。a直接指向常量池常量的引用,而b指向堆的引用,b的内部有一个变量指向常量池中的bcd的地址引用,当调用equals方法时,就用b内部的此变量和a相比较,因为地址引用相同,所以返回true。
String对象的常用方法。
1) 获取:
char charAt(int index)此方法用于获取此字符串中指定角标的字符。
IndexOf(int ch)返回指定字符在此字符串中第一次出现的索引。
IndexOf(int ch ,int fromIndex) 返回指定字符在此字符串中指定位置开始第一次出现的索引。
IndexOf(String str)返回指定字符串在此字符串中第一次出现的索引。
IndexOf(String str ,int fromIndex) 返回指定字符串在此字符串中指定位置开始第一次出现的索引。
lastIndexOf(int ch)从此字符串末尾开始返回第一次出现指定的字符的索引。
lastIndexOf(int ch ,int fromIndex)从此字符串指定位置末尾开始返回指定字符第一次出现的索引。
lastIndexOf(String str)从此字符串末尾开始返回第一次出现指定的字符串的索引。
lastIndexOf(String str ,int fromIndex)从此字符串指定位置末尾开始返回指定字符串第一次出现的索引。
int length()返回此字符串的字符长度。
String valueOf(char ch);把ch参数以字符串形式返回。
String valueOf(boolean b);把b参数以字符串形式返回。
String valueOf(char[] data);把data参数以字符串形式返回。
String valueOf(char[] data,fromIndex,int count);把data数组从指定位置开始,返回长度为count的字符串形式。
String valueOf(double d);把d参数以字符串形式返回。
String valueOf(float f);把f参数以字符串形式返回。
String valueOf(int i);把i参数以字符串形式返回。
String valueOf(long l);把l参数以字符串形式返回。
String valueOf(Object o);把o参数以字符串形式返回。
byte[] getBytes()使用平台的默认字符集将此 String
编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
byte[] getBytes(Charset charset)使用指定的Charset将此 String
编码为 byte 序列,并将结果存储到一个新的 byte 数组中
byte[] getBytes(String charset)使用指定的字符集的字符串形式将此 String
编码为 byte 序列,并将结果存储到一个新的 byte 数组中
void getBytes(int srcBegin,int srcEnd,char[] dst,int dstBegin)从此字符串srcBegin开始到srcEnd结束的区间复制取dst的dstBegin开始,设置dst字符数组。
int hashcode()返回此字符串的哈唏值。
例:
public class BaseTypeDemo {
public static void main(String[] args)
{
stringDemoMethod(“aadfdfsdfdsfdfccdsfdfeeddd”);
}
public static void stringDemoMethod(String rcs)
{
System.out.println("获取此字符串的第二个索引的字符为:"+rcs.charAt(2));
System.out.println("获取指定字符在此字符串中第一次出现索引:"+rcs.indexOf('a'));
System.out.println("获取指定字符在此字符串中从指定位置开始第一次出现索引:"+rcs.indexOf('a',4));
System.out.println("获取指定指符的字符串表示形式:"+String.valueOf('c'));
System.out.println("获取此字符串的字节数组:"+rcs.getBytes().length);
System.out.println("获取此字符串的长度:"+rcs.length());
System.out.println("获取此字符串的哈唏值"+rcs.hashCode());
}
}
2) 字符串的裁剪。
string replace(char oldchar,char newchar)将此字符串包含oldchar的所有字符替换为newchar字种并返回新字符。oldchar不会受到此方法的影响。
String replace(Charsequence target,Charsequence replacement)将此字符串中包含的target字符序列替代为replacement字符序列。
String replaceAll(String regex,String replacement)将给定的replacement替代此字符串中给定的regex正则表达式的子字符串。
String replaceFirst(String regex,String replacement) 将给定的replacement替代此字符串中给定的regex正则表达式的第一个匹配子字符串
String[] split(String regex)以匹配的正则表达式拆分此字符串,返回一个此字符串的子字符串数组。
String[] split(String regex, int limit)以匹配的正则表达式拆分此字符串,返回一个此字符串的子字符串数组。limit 参数控制模式应用的次数,因此影响所得数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后一项将包含所有超出最后匹配的定界符的输入。如果 n 为非正,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。如果 n 为 0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。
Charsequence subsequence(int BeginIndex,int EndIndex)返回此字符串的一个子字符串序列。
String substring(int BeginIndex,int EndIndex)返回此字符串的子字符串。长度从BeginIndex(包含)到EndIndex(不包含)结束
String trim()把此字符串两头的空格去除,返回一
个新字符串。
例:
public class BaseTypeDemo {
public static void main(String[] args)
{
stringDemoMethod(" abcsdfsdfdsfdabcdfsdf ");
}
public static void stringDemoMethod(String rcs)
{
System.out.println("把此字符串包含的a替换为b,原字符串为:"+rcs+"替换后:"+rcs.replace('a', 'b'));
System.out.println("把此字符串包含的abc替换为bbbb,原字符串为:"+rcs+"替换后:"+rcs.replace("abc", "bcd"));
System.out.println("把此字符串以a拆分:"+rcs.split("a"));
System.out.println("把此字符串以a拆分:"+rcs.split("a",5));
System.out.println("取此字符串第一位到第6位的子串为:"+rcs.substring(1,7));
System.out.println("把此字符串的两头空格删除:"+rcs.trim());
}
}
3) 字符串的比较。
int compareto(String anotherString)用此字符串与勤指定字符串相比较(基于Unicode对应的字符值),如果此字符串大于指定字符串返回正数;哪果此字符串小与指定字符串,返回负数,否则如果相等则返回0
int comparetoIgnoreCase(String str)此方法与compareto方法相同,唯一不同的是此方法在比较时不区分大小写。
4) 判断。
Boolean conparns(Charsequence s)判断此字符串是否包含指定字符序列。如果包含返回真(true)否则返回假(false)。
boolena contentEquals(Charsequence s)判断此字符串与指定字符序列比较,当且仅当只有指定字符串与此字符串相同时,才返回true。
boolena contentEquals(StringBuffer s)判断此字符串与指定字符串缓冲区(StringBuffer)比较,当且仅当只有指定字符串与此字符串相同时,才返回true。
Boolean endsWith(String suffix)判断此字符串是否以指定字符串结尾。
Boolean equals(Object anObject ) 将此字符串与指定的对象比较。当且仅当该参数不为 null
,并且是与此对象表示相同字符序列的 String
对象时,结果才为 true
。
Boolean equalsIgnoreCase(Object anObject ) 将此字符串与指定的对象比较(不区分大小写)。当且仅当该参数不为 null
,并且是与此对象表示相同字符序列的 String
对象时,结果才为 true
。
Boolean isEmpty()判断此字符串是否为空,当此字符串的length为0时,此方法返回true。
Boolean startsWith(String prefix)判断此字符串是否以指定字符串开始。
Boolean startsWith(String prefix,int fromIndex)判断此字符串从字定位置处开始是否以指定字符串开头。
5) 转换。
String toLowwerCase()将此字符串转换为小写。
String toUpperCase()将此字符吕转换为大写。
2. StringBuffer
stringBuiffer是线程安全的,类似于String的字符串缓冲区。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。StringBuiffer是从jkd1.0开始就有的。
StringBuffer常用的方法有:
2.1)添加
StringBuffer append(Boolean b)
StringBuffer append(char c)
StringBuffer append(char[] data)
StringBuffer append(char[] ch,int offset,int len)
StringBuffer append(double d)
StringBuffer append(float f)
StringBuffer append(int i)
StringBuffer append(long l)
StringBuffer append(String str)
StringBuffer append(Stringbuffer sg)
以上方法都是将相应的类型数据追加取此字符缓冲区的末尾。
2.2)修改
StringBuffer insert(int offset,Boolean b)
StringBuffer insert(int offset,char c)
StringBuffer insert(int offset,char[] cs)
StringBuffer insert(int index,char[] ch,int offset,int end)
StringBuffer insert(int offset,double d)
StringBuffer insert(int offset,float f)
StringBuffer insert(int offset,int i)
StringBuffer insert(int offset,Long l)
StringBuffer insert(int offset,Object o)
StringBuffer insert(int offset,String str)
以上方法都是将一种类型以字符形式插入到字符串缓冲区的指定位置处。
void setCharAt(int index,char ch)将此StringBuffer中指定的位置设置为指定的Ch。
void setLength(int newlength)设置此StringBuffer的长度。
2.3) 删除。
StringBuffer delete(int start,int end)删除字符缓冲区指定区域处的字符并返回新的字符缓冲区。
StringBuffer deleteCharAt(int index)删除此缓冲区指定索引位置的字符并返回新的字符缓冲区。
2.4) 获取。
int capacity()返回此StringBuffer的缓冲区大小(容量)
char charAt(int index)与String相同。
int IndexOf(String str) 与String相同。
int IndexOf(String str,int fromIndex) 与String相同。
int lastIndexOf(String str) 与String相同。
int lastIndexOf(String str,ing fromIndex) 与String相同。
int length()返回此StringBuffer的字符长度。
StringBuffer reverse()将此字符序列用其反转形式取代。
2.5)其他和String相同。
例:
3. StringBuilder