目录
一、String类
二、StringBuffer类
三、StringBuilder类
四、总结
在Java中封装了三个字符串类,分别为String、StringBuffer、StringBilder。
String类是一个final类,其具有不可变性使用String类拼接字符串时应该注意:
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
/**
* 模拟一个trim方法,去除字符串两端的空格
*/
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
@Test
/**
* 将一个字符串进行反转。将字符串中指定部分进行反转。比如“abcdefg”反
* 转为”abfedcg”
*/
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
@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
@Test
/**
* 获取两个字符串中最大相同子串。比如:
* str1 = "abcwerthelloyuiodef“;str2 = "cvhellobnm"
*/
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类与String类用法相似,但是StringBuffer类具有可变性,并且在实例化对象时必须使用构造函数:
在StringBuffer类中有扩充了几个方法:
StringBuilder类与StringBuffer相似,均是可变的字符序列,其提供的方法几乎也是一样的
String:不可变的字符序列
StringBuffer:可变字符序列,效率低,线程安全
StringBuilder:可变字符序列,效率高,线程不安全
注意:作为参数传递时,方法内部String类不会改变其值,StringBuffer和StringBuilder会改变!