目录
一、String类
二、StringBuffer类
三、StringBuilder类
四、总结
在Java中封装了三个字符串类,分别为String、StringBuffer、StringBilder。
一、String类
String类是一个final类,其具有不可变性使用String类拼接字符串时应该注意:
常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。 只要其中有一个是变量,结果就在堆中 如果拼接的结果调用 intern() 方法,返回值就在常量池中String类比较常用,其构造方法如下:
| 方法声明 | 功能描述 |
| String() | 创建一个内容为空的字符串 |
| String(String value) | 根据指定的字符串内容创建对象 |
| String(char[] value) | 根据指定的字符数组创建对象 |
| String(byte[] bytes) | 根据指定的字节数组创建对象 |
由于String类比较常用,也可以直接定义字符串常量:String str="abc";
String类的常用方法有:
| 方法声明 | 功能描述 |
| int indexOf(int ch) | 返回指定字符ch在字符串中第一次出现位置的索引 |
| int lastIndexOf(int ch) | 返回指定字符ch在字符串中最后一次出现位置的索引 |
| int indexOf(String str) | 返回指定子字符串str在字符串第一次出现位置的索引 |
| int lastIndexOf(String str) | 返回指定子字符串str在此字符串中最后一次出现位置的索引 |
| char charAt(int index) | 返回字符串中index位置上的字符,其中index的取值范围是0~(字符串长度-1) |
| Boolean endsWith(String suffix) | 判断此字符串是否以指定的字符串结尾 |
| int length() | 返回此字符串的长度 |
| boolean equals(Object anObject) | 将此字符串与指定的字符串比较 |
| boolean isEmpty() | 判断字符串长度是否为0,如果为0则返回true,反之则返回flase |
| boolean startsWith(String prefix) | 判断此字符串是否以指定的字符串开始 |
| boolean contains(CharSequence cs) | 判断此字符串中是否包含指定的字符序列 |
| String toLowerCase() | 使用默认语言环境的规则将String中的所有字符都转换为小写 |
| String toUpperCase() | 使用默认语言环境的规则将String中的所有字符都转换为大写 |
| static String valueOf(int i) | 将int变量i转换成字符串 |
| char[] toCharArray() | 将此字符串转换为一个字符数组 |
| String replace(CharSequence oldstr, CharSequence newstr) | 返回一个新的字符串,它是通过用 newstr替换此字符串中出现的所有 oldstr得到的 |
| String[] split(String regex) | 根据参数regex将原来的字符串分割为若干个子字符串 |
| String substring(int beginIndex) | 返回一个新字符串,它包含从指定的beginIndex处开始,直到此字符串末尾的所有字符 |
| String substring(int beginIndex, int endIndex) | 返回一个新字符串,它包含从指定的beginIndex处开始,直到索引endIndex-1处的所有字符 |
| String trim() | 返回一个新字符串,它去除了原字符串首尾的空格 |
String类的练习题:
1.模拟一个trim方法,去除字符串两端的空格
@Test
public void test1(){
String s=" 1 23 ";
String s1=s.replaceFirst(" ","");
char[] chars=s1.toCharArray();
char[] chars1=new char[chars.length-1];
for(int i=0;i
运行结果为:
1 23
1 23
2.
将一个字符串进行反转。将字符串中指定部分进行反转。比如
“ab
cdef
g”
反
转为
”ab
fedc
g”
@Test
public void test2(){
String str="abcdefg";
String substr="bcd";
int index=str.indexOf(substr);
char[] chars=str.toCharArray();
for(int i=index,k=0;i<(index+substr.length())/2;i++,k++){
char ch=chars[i];
chars[i]=chars[index+substr.length()-1-k];
chars[index+substr.length()-1-k]=ch;
}
String str1=new String(chars);
System.out.println(str);
System.out.println(substr);
System.out.println(str1);
}
运行结果为:
abcdefg
bcd
adcbefg
3.
获取一个字符串在另一个字符串中出现的次数
@Test
public void test3(){
String str="uibufangqijuiayubufw";
String substr="buf";
int count=0;
int index=0;
while(str.indexOf(substr,index)>=0){
count++;
index=str.indexOf(substr,index)+1;
}
System.out.println(count);
}
运行结果:2
4. 对字符串字符进行自然排序
@Test
public void test5(){
String s="908762";
char[] chars=s.toCharArray();
for(int i=0;i
运行结果:026789
5.
获取两个字符串中最大相同子串。比如:
str1 = "abcwerthelloyuiodef“;str2 = "cvhellobnm"
@Test
public void test6(){
String str1="abcwerthellobyuiodef";
String str2="cvhellobnm";
String str;
String max=str1.length()>=str2.length()?str1:str2;
String min=str1.length()0){
System.out.println(str);
return;
}
}
}
}
运行结果:hellob
二、StringBuffer类
StringBuffer类与String类用法相似,但是StringBuffer类具有可变性,并且在实例化对象时必须使用构造函数:
StringBuffer():初始容量为16的字符串缓冲区
StringBuffer(int size):构造指定容量的字符串缓冲区
StringBuffer(String str):将内容初始化为指定字符串内容
在StringBuffer类中有扩充了几个方法:
StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
StringBuffer delete(int start,int end):删除指定位置的内容
StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str
StringBuffer insert(int offset, xxx):在指定位置插入xxx
StringBuffer reverse() :把当前字符序列逆转
三、StringBuilder类
StringBuilder类与StringBuffer相似,均是可变的字符序列,其提供的方法几乎也是一样的
四、总结
String:不可变的字符序列
StringBuffer:可变字符序列,效率低,线程安全
StringBuilder:可变字符序列,效率高,线程不安全
注意:作为参数传递时,方法内部String类不会改变其值,StringBuffer和StringBuilder会改变!



