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

时间:2019-03-19
本文章向大家介绍java学习笔记15(String 类,StringBuffer),主要包括java学习笔记15(String 类,StringBuffer)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
/*
 * 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 
定义:可变字符数组    线程安全的 可变字符序列
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**/