黑马程序员-string和stringbuffer总结

来源:互联网 发布:试卷生成系统php 编辑:程序博客网 时间:2024/04/30 22:31

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

基本概念介绍.

String就是java等编程语言中的字符串,用双引号引起来的几个字符.如"Abcdef","你好".
String类适用于描述字符串事物。

字符串是一个特殊的对象。

字符串一旦初始化就不可以被改变。

两种方式:String str = "abcdeg";  String str1 = new String("abc") 前者可以看做是后者的简写吧。

下面对string的一些功能作介绍.

一、获取和判断功能

    string提供了多个方法对字符串进行操作

    1、获取:
        (1)int length():获取长度,字符串中包含的字符数,也就是字符串的长度,字符串是方法,数组是属性
        (2)、根据位置获取位置上的某个字符    
             intindexOf(int ch):返回的是ch在字符串中第一次出现的位置
             intindexOf(int ch,int fromIndex):从fromIndex指定位置开始,获取str在字符串中的出现的位置            
             intindexOf(String str):返回的是ch在字符串中第一次出现的位置
             intindexOf(String str,int fromIndex):从fromIndex指定位置开始,获取str在字符串中的出现的位置
    2、判断:
        (1)、字符串中是否包含一个子串
           boolean contains(CharSequence s)     特殊之处:indexOf(str):可以索引str第一次出现的位置,如果返回-1,表示该str不在字符串中存在,所以,也可以用于对指定判断是否包含。
           if(str.indexOf("aa")!=-1)  该方法既可以判断,也可以获取出现的位置
        (2)、字符串中是否有内容
           boolean isEmpty()  原理是判断长度是否为0“” null不一样
        (3)、字符串是否以指定内容开头
           boolean startsWith(str)
        (4)、字符串是否以指定内容结尾
           boolean endsWith(str)
        (5)、判断字符串内容是否相同
           boolean  equals(str);
        (6)、判断内容是否相同,并忽略大小写
           boolean equalsIgnoreCase(str)


二、转换功能
    1、将字符数组转成字符串
        构造函数:
           String(char[] value) 
           String(char[] value, int offset, int count)将字符数组一部分转成字符串
        静态方法:
            static String copyValueOf(char[] data);
            static String copyValueOf(char[] data,int offset,int count);
            static String ValueOf(char[] data);
    2、将字符串转成字符数组
        byte[]getBytes() 
        byte[]getBytes(Charset charset)  
    3、将字节数组转成字符串
        String(byte[]value) 
        String(byte[] value,int offset, int count)将字节数组一部分转成字符串
    4、将字符串转成字节数组
        char[] toCharArray() 将此字符串转换为一个新的字符数组
    5、将基本数据类型转成字符串
        static StringvalueOf(boolean b) 
        static StringvalueOf(char c) 
        static StringvalueOf(char[] data)  
        static StringvalueOf(char[] data, int offset, int count) 
        static StringvalueOf(double d) 
        static StringvalueOf(int i) 
        但是使用变量 + “” 这样转成字符串更方便

public class Lianxi1{  

    public static void main(String[] args){  

        method_trans();  

    }  

    public static void method_trans(){  

        char[] arr = {'a','b','c','d','e','f'};  

        String s = new String(arr);  

        String s = new String(arr,2,2);  

        sop(s);  

    }  

    public static void sop(Object obj){  

        System.out.println(obj);  

    }  

}  



三、切割和替换功能
    1、替换
        String replace(charoldChar,char newChar)
    2、切割
        String[]split(String str)  
    3、子串,获取字符串中的一部分,
        String substring(intbeginIndex)  
        String substring(intbeginIndex, int endIndex) //包含头,不包含尾部

public class Lianxi2{  

    public static void main(String[] args){  

        method_sub();  

    }  

    public static void method_split(){  

        String s = "liming,lisi,wangwu,xiaoqing,hehe";  

        String[] arr = s.split(",");  

        for(int i=0;i<arr.length;i++){  

            sop(arr[i]);  

        }  

    }  

    public static void method_sub(){  

        String s = "abcdefghjkl";  

        sop(s.substring(3));    

        sop(s.substring(2,5));    //  包含头,不包含尾部  

    }  

    public static void sop(Object obj){  

        System.out.println(obj);  

    }  

}  



五、比较和去除空格功能
    1、将字符串转成大写或者小写
        (1)String toUpperCase();
        (2)String toLowerCase();
    2、将字符串两端的多个空格去除
        (1)String trim();
    3、对两个字符串进行自然顺序的比较
        (1)int compareTo(String);
        如果参数字符串等于此字符串,则返回值 0;如果此字符串按字典顺序小于字符串参数,则返回一个小于 0的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于 0的值。
        返回他们 ascle码值相减的结果

public class Demo{  

    public static void main(String[] args){  

        method_7();  

    }  

    public static void method_split(){  

        String s = "zhangsan,lisi,wangwu";  

        String[] arr = s.split(",");  

        for(int i=0;i<arr.length;i++){  

            sop(arr[i]);  

        }  

    }  

    public static void method_sub(){  

        String s = "abcdef";  

        sop(s.substring(2));    //cdef  

        sop(s.substring(2,4));    //cd  包含头,不包含尾部  

    }  

    public static void method_7(){  

        String s = "         Hello Java       ";  

        sop(s.toLowerCase());  

        sop(s.toUpperCase());  

        sop(s.trim());  

        String s1 = "acc";  

        String s2 = "aaa";  

        sop(s1.compareTo(s2));//2  

        sop(s2.compareTo(s1));//-2  

    }  

    public static void sop(Object obj){  

        System.out.println(obj);  

    }  

}  

public class Demo{  

    public static void main(String[] args){  

        method_7();  

    }  

    public static void method_split(){  

        String s = "zhangsan,lisi,wangwu";  

        String[] arr = s.split(",");  

        for(int i=0;i<arr.length;i++){  

            sop(arr[i]);  

        }  

    }  

    public static void method_sub(){  

        String s = "abcdef";  

        sop(s.substring(2));    //cdef  

        sop(s.substring(2,4));    //cd  包含头,不包含尾部  

    }  

    public static void method_7(){  

        String s = "         Hello Java       ";  

        sop(s.toLowerCase());  

        sop(s.toUpperCase());  

        sop(s.trim());  

        String s1 = "acc";  

        String s2 = "aaa";  

        sop(s1.compareTo(s2));//2  

        sop(s2.compareTo(s1));//-2  

    }  

    public static void sop(Object obj){  

        System.out.println(obj);  

    }  

}  



六、模拟一个trim方法,去除字符串两端的空格
    1、判断字符串第一个位置是否是空格,如果是,继续向下判断,直到不是空格为止
    2、判断字符串最后一个为止时候是空格,如果是,继续向前判断,直到不是空格为止
    3、当开始和结尾都判断到不是空格时,就是要获取的字符串
    4、开始位置不可以大于结束位置

[java] view plaincopy

public class Demo{  

    public static void main(String[] args){  

        String s = "   aaa  aa   ";  

        sop("("+s+")");  

        s = myTrim(s);  

        sop("("+s+")");  

    }  

    public static String myTrim(String str){  

        int start  = 0,end = str.length()-1;  

        while(start<=end&&str.charAt(start)==' '){  

            start++;  

        }  

        while(start<=end&&str.charAt(end)==' '){  

            end--;  

        }  

        return str.substring(start,end+1);  

    }  

    public static void sop(Object obj){  

        System.out.println(obj);  

    }  

}  



七、将一个字符串进行翻转。将字符串中指定部分进行翻转
    1、曾经学习过对数组的元素进行翻转
    2、将字符串编程数组,对数组进行反转
    3、将反转后的数组编程字符串
    4、只要将反转指定反转部分的开始和结束为止作为参数传递即可

[java] view plaincopy

public class Demo{  

    public static void main(String[] args){  

        String s = "abcdef";  

        sop(s);  

        sop(reverseString(s));  

        sop(reverseString(s,1,4));  

    }  

    public static String reverseString(String str,int start,int end){  

        //字符串变数组  

        char[] chs = str.toCharArray();  

        //翻转数组  

        reverse(chs,start,end);  

        //将数组编程字符串  

        return new String(chs);  

    }  

    public static String reverseString(String str){  

        return reverseString(str,0,str.length());  

    }  

    private static void reverse(char[] arr,int x,int y){  

        for(int start=x,end=y-1;start<end;start++,end--){  

            swap(arr,start,end);  

        }  

    }  

    private static void swap(char[] arr,int x,int y){  

        char temp = arr[x];  

        arr[x] = arr[y];  

        arr[y] = temp;  

    }  

    public static void sop(Object obj){  

        System.out.println(obj);  

    }  

}  



八、获取一个字符串在另一个字符串中出现的次数  不可以使用split形式,因为如果关键字在开头,则切的时候出错
    1、定义一个计数器
    2、获取kk第一次出现的位置
    3、从第一次出现位置后剩余的字符串中继续获取kk出现的位置,每获取一次就计数一次
    4、当获取不到时候,技术完成。

[java] view plaincopy

public class Demo{  

    public static void main(String[] args){  

        String s = "kkdkhkkgdkskkfhgfdkksakdkkhgkkkjfdsh";  

        sop(getSubCount(s,"kk"));  

    }  

    public static int getSubCount(String str,String key){  

        int count = 0;  

        int index = 0;  

        while((index = str.indexOf(key,index))!=-1){  

            count++;  

            index = index+key.length();  

        }  

        return count;  

    }  

    public static void sop(Object obj){  

        System.out.println(obj);  

    }  

}  



九、获取两个字符串中最大相同子串,第一个动作:将短的那个字符串进行长度依次递减的子串打印
    "abcwerthelloyuiodef"
    "cvhellobnm"
    1、将短的那个子串按照长度递减的方式获取到
    2、将每获取到的子串去长串中判断是否包含,如果包含,则找到。

[java] view plaincopy

public class Demo{  

    public static void main(String[] args){  

        String s1 = "abcwerthelloyuiodef";  

        String s2 = "cvhellobnm";  

        sop(getMaxSubString(s2,s1));  

    }  

    public static String getMaxSubString(String s1,String s2){  

        String max = "",min = "";  

        max = (s1.length()>s2.length())?s1:s2;  

        min = (max==s1)?s2:s1;  

        for(int x=0;x<s2.length();x++){  

            for(int y=0,z=min.length()-x; z!=min.length()+1; y++,z++){  

                String temp = min.substring(y,z);  

                if(max.contains(temp)){  

                    return temp;  

                }  

            }  

        }  

        return "";  

    }  

    public static void sop(Object obj){  

        System.out.println(obj);  

    }  

}  



十、StringBuffer(常见功能-添加)
        (1)、字符串的组成原理就是通过该类实现的。
        (2)StringBuffer可以对字符串内容进行增删
        (3)StringBuffer是一个容器
        (4)、很多方法与String相同
        (5)StringBuffer是可变长度的
    1Stringbuffer是字符串缓冲区,是一个容器,
        长度可变化
        可以操作多个数据类型
        最终会通过toString方法变成字符串
        C create U update Rread D delete
        (1)、存储
           StringBuffer append():将指定数据作为参数添加到已有数据结尾处
           StringBuffer insert(index,数据):可以将数据插入到指定位置上去
        (2)、删除
           StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end
           StringBuffer deleteCharAt(index):删除指定位置的字符
           sb.delete(0,sb.length());  清空缓冲区,删除全部
           sb.delete(2,3);  删除一个字符,应该用sb.deleteCharAt(2);
        (3)、获取
            charcharAt(int index)
            intindexOf(String str)
            intlastIndexOf(String str)
            intlength()
            Stringsubstring(int start,int end)  注意,返回的是string,不是StringBuffer
        (4)、修改
           StringBuffer replace(start,end,string);
           StringBuffer reverse()  
            voidgetChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 
          将字符从此序列复制到目标字符数组 dst 

[java] view plaincopy

public class Demo{  

    public static void main(String[] args){  

        method_getChars();  

    }  

    public static void method_getChars(){  

        StringBuffer sb = new StringBuffer("abcdef");  

        char[] chs = new char[4];  

        sb.getChars(1,4,chs,1);  

        for(int x=0;x<chs.length;x++){  

            sop("chs["+x+"]="+chs[x]+";");  

        }  

        /* 

        chs[0]= 

        chs[1]=b; 

        chs[2]=c; 

        chs[3]=d; 

        */  

    }  

    public static void method_update(){  

        StringBuffer sb = new StringBuffer("abcde");  

        sb.replace(1,4,"java");  

        sop(sb.toString());  

    }  

    public static void method_del(){  

        StringBuffer sb = new StringBuffer("abcde");  

        sb.delete(0,sb.length());  

        //sb.delete(1,3);//删掉 bc,2两个,因为不包含尾  

        sop(sb.toString());  

    }  

    public static void method_add(){  

        StringBuffer sb = new StringBuffer();  

        sb.append("abc").append(true).append(34);//方法调用链  

        sb.insert(1,"qq");  

        sop(sb.toString());  

        // StringBuffer sb1 = sb.append(34);  

        // sop(sb.toString());  

        // sop(sb1.toString());  

        // sop("sb==sb1 = "+(sb==sb1));//true  

    }      

    public static void sop(Object obj){  

        System.out.println(obj);  

    }  

}  



十二、StringBuilder
    1JDK 1.5之后,出现了StringBuilder
    2、一个可变的字符序列。此类提供一个与 StringBuffer兼容的 API,但不保证同步。该类被设计用作 StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer要快。
        (1)StringBuffer是线程同步  多线程也可以,自身有判断锁,但是效率低
        (2)StringBuilder是线程不同步  不是多线程的,不用判断锁,所以单线程都用这个
    3、升级三个因素
        (1)、提高效率
        (2)、简化书写
        (3)、提高安全性
十三、基本数据类型对象包装类
    1、基本数据类型  引用数据类型
          byte       Byte
          int        Integer
          short      short
          long       Long
          float      Float
          double     Double
          char       Character
    2、基本数据类型对象包装类的最常见作用,就是用于基本数据类型和字符串类型之间做转换
    3、基本数据类型转成字符串
        基本数据类型+""
        基本数据类型.toString(基本数据类型)。如:Integer.toString(34)//34编程“34”
    4、字符串转成基本数据类型   
       Integer.parseInt("123")  必须传入数字格式字符串
       Long.parseLong("123")
       Double.parseDouble(1.23)
        字符不需要,它本身就是字符
    5、十进制转成其他进制
        toBinaryString()
        toHexString
        toOc
    6、其他进制转为十进制
       Integer.parseInt("数字字符串",该字符串的进制)
十四、基本数据类型对象包装类新特性  JDK 1.5之后出现的新特性
    1、自动装箱
        Integer y = newInteger(123);
        可以写成
        Integer y = 123;
    2、自动拆箱
        Integer x = new Integer(123);
        x = x + 2;
        进行自动拆箱,将x变为int类型,和2进行加法运算,在将和进行装箱赋给x
    3integer  对象,可以是 null,但是int不会,要注意
    4        //因为当数值在byte范围内容,对于新特性,如果该数值已经存在,则不会在开辟新空间
        Integer  m =128;
        Integer  n =128;
       sop("m==n:"+(m==n));//false
        Integer  a =128;
        Integer  b =128;

       sop("a==b:"+(a==b));//true

[java] view plaincopy

public class Demo{  

    public static void main(String[] args){  

        Integer x = new Integer("123");  

        Integer y = new Integer(123);  

        sop(x==y);//false  

        sop(x.equals(y));//true  

          

        //因为当数值在byte范围内容,对于新特性,如果该数值已经存在,则不会在开辟新空间  

        Integer  m = 128;  

        Integer  n = 128;  

        sop("m==n:"+(m==n));//false  

        Integer  a = 128;  

        Integer  b = 128;  

        sop("a==b:"+(a==b));//true  

    }  

  

    public static void sop(Object obj){  

        System.out.println(obj);  

    }  

}  

 ------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------






0 0
原创粉丝点击