学习String和StringBuilder和StringBuffe,三个案例代码展示实现和三者的区别,实现代码的错误。
String常用案例
public static void main(String[] args) {
// (1)声明一个String对象,其内容为“I am a student,I am at ccit”;
// (2)输出字符串的长度;
// (3)输出字符串的第一个和最后一个字符;
// (4)输出字符串的第一个和最后一个单词;
// (5)将其中的‘c’替换为‘C’输出;
// (6)输出其中的各个单词;
// (7)判断字符串中是否包含“ma”这个单词;
// (8)判断字符串是否以“I”开头,以“I”结尾。
String[] string;
String string2="I am a student , I am at ccit";
System.out.println(string2.length());
System.out.println("start:"+string2.substring(0,1)+" end:"+string2.substring(string2.length()-1));
System.out.println(string2.substring(0,string2.indexOf(" ")));
System.out.println(string2.substring(string2.lastIndexOf(" ")+1));
// System.out.println(string2.replaceAll("c", "C"));
System.out.println(string2.replace("c", "C"));
string=string2.split(" ");
for(String s:string){
System.out.println(s);
}
System.out.println(string2.indexOf("ma"));
System.out.println(string2.startsWith("I"));
System.out.println(string2.endsWith("I"));
}
29
start:I end:t
I
ccit
I am a student , I am at CCit
I
am
a
student
,
I
am
at
ccit
-1
true
false
StringBuilder实现 添加,修改,删除,查询
public static void main(String[] args) {
// StringBuilder实现 添加,修改,删除,查询
StringBuilder stringBuilder=new StringBuilder();
stringBuilder.append("I");
stringBuilder.append(" am");
stringBuilder.append(" a");
stringBuilder.append(" student");
stringBuilder.append("and person");
System.out.println(stringBuilder);
stringBuilder.insert(0, "beacase");//添加,index=0
stringBuilder.replace(0, 1, "B");//修改,第一个b改为B
System.out.println(stringBuilder);
stringBuilder.delete(0, 7);//删除0到6的位置的字符
System.out.println(stringBuilder);
System.out.println(stringBuilder.reverse());//顺序对调
stringBuilder.setCharAt(0, 'f');//修改,第一个n改为f
System.out.println(stringBuilder);
I am a studentand person
BeacaseI am a studentand person
I am a studentand person
nosrep dnatneduts a ma I
fosrep dnatneduts a ma I
StringBuffer来完成.打印由7,8,9三个数组成的三位数,要求该三位数中任意两位数字不能相同;打印格式: 各不相同的三位数字以空格分隔,如789 798 879 897 978 987。注:要求使用StringBuffer来完成
StringBuffer stringBuffer=new StringBuffer(100);
int[] s={7,8,9};
for(int i=0;i<s.length;i++){
for(int j=(i+1)%s.length,k=1;k<s.length;k++,j++){
if((j+1)%s.length==i){
j=(j)%s.length;
stringBuffer.append(s[i]+""+s[j]+""+s[(j+2)%s.length]+" ");
}else{
stringBuffer.append(s[i]+""+s[j]+""+s[(j+1)%s.length]+" ");
}
}
}
System.out.println(stringBuffer);
}
789 798 897 879 978 987
String VS StringBuffer VS StringBuilder区别
StringBuilder 和 StringBuffer 非常类似,均代表可变的字符序列,而且方法也一样
String:不可变字符序列。
StringBuilder:可变字符序列、效率高、线程不安全,适合单线程。
StringBuffer:可变字符序列、效率低、线程安全,适合多线程。
(多线程,单线程专门要花一天时间讲)
String使用陷阱:
string s=“a”; //创建了一个字符串
s=s+“b”; //实际上原来的"a"字符串对象已经丢弃了,现在又产生了一个字符串s+“b”(也就是"ab")。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能。
实现代码的错误
1. 使用StringBuffer 和StringBuilder不要把类名写为StringBuffer VS StringBuilder,这样不可以去调用对应的方法。
2. StringBuffer 和StringBuilde如果不分配大小,默认为16个字符的空间,可以单步调试查看空间情况,String是默认为8个字符的空间。
`