java学习笔记15(String 类,StringBuffer)

时间:2020-12-10 15:29:04
/*
* String类的特点:
* 所有的""都是String的对象
* 字符串一旦创建就是常量,不能改变
*/
public class StringDemo {
public static void main(String[] args) {
//发现创建对象不需要new
String str = "abcd";
System.out.println(str);
//输出:abcd而不是内存地址,因为String类重写了toString方法
str = "efgh";
System.out.println(str);
//输出:efgh,之前不是说常量不能改变吗?这里的原因:
//字符串本身是一个对象,在堆内存中,字符串本质是一个字符的数组
//源码:private final char value[];有final修饰,因此String是常量
//str = "efgh"是在内存中重新开一片,str的指向改变了,而"abcd"字符串对象没有改变 }
}

String练习:

//1.统计某字符串中另一字符串出现的次数
public class Demo1 {
public static void main(String[] args) {
String s=new String("goodgoodstudy,daydayup");
int count=0;
JiShuQi(s,"good", count);
}
private static void JiShuQi(String s,String key, int c) {
int x=s.indexOf(key);
if (x==-1) {
System.out.println(key+"出现的次数为"+c);
return;
}
s=s.substring((x+key.length()));
c++;
JiShuQi(s, key, c);
}
}
//将一字符串首字母变成大写,其余字符小写
public class Demo2{
public static void main(String[] args) {
String s=new String("ksdhfEGBDebf");
Change(s);
} private static void Change(String s) {
String head=s.substring(0, 1).toUpperCase();
String sur=s.substring(1).toLowerCase();
String str=new String(head+sur);
System.out.println(str);
}
}
public class Zuoye3 {
/*
* 获取指定字符串中,大写字母、小写字母、数字的个数。
String s = "asdklf2234jlOLKJ"; 97--122小写
65-90 大写
48-57 0-9
* 思想:
* 1. 计数器,就是int变量,满足一个条件 ++
* 2. 遍历字符串, 长度方法length() + charAt() 遍历
* 3. 字符判断是大写,是小写,还是数字
*/
public static void main(String[] args) {
String s = "asdklf2234jlOLKJ";
int index=0;
JiShu(s,index,0,0,0);
} private static void JiShu(String s,int index, int Dcount, int Xcount, int Ncount) {
char x=s.charAt(index);
if (x>=65&x<=90) {
Dcount++;
}else if(x>=97&x<=122){
Xcount++;
}else if(x>=48&x<=57){
Ncount++;
}
index++;
if(index==s.length()){
System.out.println("大写字母:"+Dcount+"个,小写字母:"+Xcount+"个,数字:"+Ncount+"个");
return;
}
JiShu(s, index, Dcount, Xcount, Ncount);
}
}
/*StringBuffer
定义:可变字符数组 线程安全的 可变字符序列 内部定义了数组,数组没有final,可以改变,数组默认容量16
StringBuffer与String 的区别:String是一个不可变的字符序列
String一旦创建就是常量 不能改变
StringBuffer的 方法:append();
insert();
delete();
replace();
reverse();
toString();
StringBuffer与StringBuilder的区别:StringBuffer是jdk1.0版,线程安全,效率低,
StringBuilder是jdk1.5版,线程不安全,效率高
开发中用StringBuilder,因为开发速度快
*/
public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer str=new StringBuffer();
fun1(str);
fun2(str);
fun3(str);
fun4(str);
fun5(str);
fun6(str);
} private static void fun6(StringBuffer str) {
// toString()转字符串;
System.out.println("方法6:toString()方法");
System.out.println("原字符串"+str);
String s=str.toString();//将StringBuffer转字符串类型
System.out.println("转字符串:"+s);
} private static void fun5(StringBuffer str) {
// reverse()方法:
System.out.println("方法5:reverse()方法");
System.out.println("原字符串"+str);
str.reverse();
System.out.println("翻转后字符串:"+str);
System.out.println(); } private static void fun4(StringBuffer str) {
// replace()方法
//replace(start, end, str);start:要替换字符的开始位置,end:替换的结束位置(不包含结束位置字符),str:替换的字符串
System.out.println("方法4:replace()方法");
System.out.println("原字符串为:"+str);
str.replace(1, 3, "-i love java-");
System.out.println("替换后的字符串为:"+str);
System.out.println();
} private static void fun3(StringBuffer str) {
// delete()方法
//delete(start, end)start:开始下标 end:结束下标()不包含结束下标的字符
System.out.println("方法3:delete()方法");
System.out.println("原字符串:"+str);
str.delete(3, 5);
System.out.println("删除后字符串:"+str);
System.out.println();
} private static void fun2(StringBuffer str) {
// insert(插入的位置(下标),插入的字符串)方法
System.out.println("方法2:insert()方法");
System.out.println("源字符串为:"+str);
str.insert(3, "java");
System.out.println("插入后字符串为"+str);
System.out.println();
} private static void fun1(StringBuffer str) {
// append()方法:追加
System.out.println("方法1:append()");
str.append("hello world");
System.out.println("原字符串为空,追加后为:"+str);
System.out.println();
}
}
/*结果:
* 方法1:append()
原字符串为空,追加后为:hello world 方法2:insert()方法
源字符串为:hello world
插入后字符串为heljavalo world 方法3:delete()方法
原字符串:heljavalo world
删除后字符串:helvalo world 方法4:replace()方法
原字符串为:helvalo world
替换后的字符串为:h-i love java-valo world 方法5:reverse()方法
原字符串h-i love java-valo world
翻转后字符串:dlrow olav-avaj evol i-h 方法6:toString()方法
原字符串dlrow olav-avaj evol i-h
dlrow olav-avaj evol i-h**/