JAVA中定义了String和StringBuffer两个类来封装字符串,他们都位于java.lang包中,所以不需要导包就可以直接使用。
String类
String类的构造方法
方法声明 | 功能描述 |
String() | 创建一个内容为空的字符串 |
String(String value) | 根据指定的字符内容创建对象 |
String(char[] value) | 根据指定的字符数组创建对象 |
public class Practice {
public static void main(String[]args){
String str1 = new String();
String str2 = new String("abcd");
char []charArray = new char[]{'A','B','C'};
String str3 = new String(charArray);
System.out.println("a"+str1+"b");
System.out.println(str2);
System.out.println(str3);
}
}
String类的常见操作
方法声明 | 功能描述 |
int indexOf(int ch) | 返回指定字符在此字符串中第一次出现处的索引 |
int lastIndexOf(int ch) | 返回指定字符在此字符串中最后一次出现处的索引 |
int indexOf(String str) | 返回指定子字符串在此字符串中第一次出现处的索引 |
int lastIndexOf(Sring str) | 返回指定子字符串在此字符串中最后一次出现处的索引 |
char charAt(int index) | 返回字符串中index位置上的字符,其中,index的取值范围是(0~字符长度-1) |
boolean endsWith(String suffix) | 判断此字符串是否以指定的字符串结尾 |
int length() | 返回此字符串的长度 |
boolean equals(Object anObject) | 将此字符串与指定的字符串比较 |
boolean isEmpty() | 当且仅当字符串长度为0时返回ture |
boolean startsWith(String prefix) | 判断此字符串是否以指定的字符串开始 |
boolean contains(CharSequence cs) | 判断此字符串是否包含指定的字符序列 |
String toLowerCase() | 使用默认语言环境的规则将String中的所有字符都转换为小写 |
String toUpperCase() | 使用默认语言环境的规则将String中的所有字符都转换为小写 |
static String valueOf(int i) | 返回int参数的字符串表示形式 |
char [] toCharArry() | 将此字符串转换为一个字符数组 |
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() | 返回一个新字符串,它去除了原字符串首位的空格 |
字符串的基本操作
public class Temp {
public static void main(String[]args){
String s = "ababcdedcba";
System.out.println("字符串的长度为:"+s.length());
System.out.println("字符串中的第一个字符:"+s.charAt(0));
System.out.println("字符c第一次出现的位置:"+s.indexOf('c'));
System.out.println("字符c最后一次出现的位置:"+s.lastIndexOf('c'));
System.out.println("子字符串第一次出现的位置:"+s.indexOf("ab"));
System.out.println("子字符串最后一次出现的位置:"+s.lastIndexOf("ab"));
}
}
字符串转换操作
public class Temp {
public static void main(String[]args){
String str = "abcd";
System.out.print("将字符串转化为字符数组后的结果:");
char[]charArray = str.toCharArray();//字符串转换为字符数组
for(int i = 0;i < charArray.length;i++){
if (i!=charArray.length-1){
System.out.print(charArray[i]+",");
}
else {
System.out.println(charArray[i]);
}
}
System.out.println("将int值转换为String类型之后的结果:"+String.valueOf(12));
System.out.println("将字符串转换成大写之后的结果:"+str.toUpperCase());
}
}
字符串的替换和去除空格操作
public class Temp {
public static void main(String[]args) {
String s = "itcast";
System.out.println("将it替换成cn.it的结果:"+s.replace("it","cn.it"));
String s1 = " i t c a s t ";
System.out.println("去除字符串两端空格后的结果:"+ s1.trim());
System.out.println("去除字符串中所有空格后的结果:"+s1.replace(" ",""));
}
}
注意:trim()方法只能去除两端的空格
字符串的判断操作
public class Temp {
public static void main(String[]args) {
String s1 = "String";
String s2 = "Str";
System.out.println("判断是否以字符串Str开头:"+s1.startsWith("Str"));
System.out.println("判断是否以字符串ng结尾:"+s1.endsWith("ng"));
System.out.println("判断是否包含字符串tri:"+s1.contains("tri"));
System.out.println("判断字符串是否为空:"+s1.isEmpty());
System.out.println("判断两个字符串是否相等:"+s1.equals(s2));
}
}
注意:在程序中可以通过“==”和equals()两种方式对字符串进行比较,但这两种方式有明显的区别。equals()方法用于比较两个字符串中的字符是否相等,==方法用于比较两个字符串对象的地址是否相同。
public class Temp {
public static void main(String[]args) {
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1==s2);//结果为false,因为s1和s2是两个对象
System.out.println(s1.equals(s2));
}
}
字符串的截取和分割
public class Temp {
public static void main(String[]args) {
String str = "羽毛球-篮球-乒乓球";
System.out.println("从第五个字符截取到末尾的结果:"+str.substring(4));
System.out.println("从第五个字符截取到第六个字符的结果:"+str.substring(4,6));
System.out.println("分割后的字符串数组中的元素依次为:");
String[]strArray = str.split("-");
for(int i = 0;i < strArray.length;i++){
if(i!=strArray.length-1){
System.out.print(strArray[i]+",");
}
else {
System.out.println(strArray[i]);
}
}
}
}
substring()方法传入了两个参数4和6,因为字符串在截取时,只包括开始索引,不包括结束索引,所以会截取第5个和第6个字符。
StringBuffer类
StringBuffer类和String类最大的区别在于它的内容和长度都是可以改变的。
StringBuffer类的一些方法
方法声明 | 功能描述 |
StringBuffer append(char c) | 添加参数到StringBuffer对象中 |
StringBuffer insert(int offset,String str) | 将字符串中的offset为位置插入字符串str |
StringBuffer deleteCharAt(int index) | 移除此序列指定位置的字符 |
StringBuffer delete(int start,int end) | 删除StringBuffer对象中指定范围的字符或字符串序列 |
StringBuffer replace(int start, int end,String s) | 在StringBuffer对象中替换指定的字符或字符串序列 |
void setCharAt(int index,char ch) | 修改指定位置index处的字符序列 |
String toString() | 返回StringBuffer缓冲区中的字符串 |
StringBuffer reverse() | 将此字符序列用其反转形式取代 |
public class Temp {
public static void main(String[]args) {
System.out.println("1、添加");
add();
System.out.println("2、删除");
remove();
System.out.println("3、修改");
alter();
}
public static void add(){
StringBuffer s = new StringBuffer();
s.append("abcdefg");
System.out.println("append添加结果:"+ s);
s.insert(2,"123");
System.out.println("insert添加结果:"+ s);
}
public static void remove(){
StringBuffer s = new StringBuffer("abcdefg");
s.delete(1,5);
System.out.println("删除指定位置结果:"+s);
s.deleteCharAt(2);
System.out.println("删除指定位置结果:"+s);
s.delete(0,s.length());
System.out.println("清空缓冲区结果:"+s);
}
public static void alter(){
StringBuffer s = new StringBuffer("abcdef");
s.setCharAt(1,'p');
System.out.println("删除指定位置字符结果:"+s);
s.replace(1,3,"qq");
System.out.println("替换指定位置字符(串)结果:"+s);
System.out.println("将字符串翻转结果:"+s.reverse());
}
}
注意:append()方法始终将这些字符添加到缓冲区的末尾,而insert()方法则可以在指定位置添加字符。
String类和StringBuffer类的区别:
1、 String类表示的字符串时常量,一旦创建后,内容和长度都是无法改变的。而String Buffer表示字符容器,其内容和长度可以随时修改。
2、 String类覆盖了Object类的equals()方法,而StringBuffer类没有覆盖Object类的equals()方法
3、 String类的对象可以用操作符“+”进行连接,而StringBuffer类对象之间不能