黑马程序员技术交流社区

标题: String与StringBuffer的个人总结 大家补充~ [打印本页]

作者: 歸羽    时间: 2014-7-16 10:26
标题: String与StringBuffer的个人总结 大家补充~
String类
字符串是一个特殊的对象。
字符串一旦初始化就不可以被改变。
public class StringDemo
{
        public static void string(){
                String str="abc"; //创建一个对象abc
                String ste1=new String("abc");//创建两个对象new String;abc
                System.out.println(s==s1);//false
                System.out.println(s.equals(s1));
                /*
                String类中的equals复写Object中equals方法建立了string类自己的判断字符串是否相等的依据。
                其实就是比较字符串的内容。
                */
                /*
                字符串建立存储在常量池中 ,池中没有就建立新的对象,池中存在就直接使用对象的地址值。
                */
        }
}

按照面向对象的思想对字符串进行功能分类
                "abcd";
                1获取
                A获取字符串中的字符个数(长度)
                        int length();
                B根据位置获取字符
                        char charAt(int index);
                C根据字符获取在字符串中的第一次出现的位置
                        int indexOf(String str);
                        int indexOf(String atr,int fromIxdex);根据字符串获取字符串中第一次出现的位置,String字符串找首字母
                        int lastIndexOf(String str);
                        int lastIndexOf(String atr,int fromIxdex);根据字符串获取字符串中最后一次出现的位置
                D获取字符串中一部分字符串,也叫字串
                        String substring(int beginIndex,int endIndex);包含begin,不包含end;
                2转换
                A将字符串变成字符串数组(字符串的切割)
                        String[] split(String regex);涉及到正则表达式
                B将字符串变成字符数组
                        char[] toCharArray();
                C将字符串变成字节数组
                        byte[] getBytes();
                D将字符便变成字节数组
                        String toUpperCase();
                        String toLowerCase();
                E将字符串中的内容进行替换
                        String replace(char oldch,char newch);
                        String replace(String s1,String s2);
                F将字符串两端的空格取出
                        String trim();
                G将字符串进行连接
                        String concat(String str);将指定字符串连接到此字符串的结尾
                将数组转成字符串,字节,字符,字节数组查询本机默认编码表GBK
                        String(字节数组 byte[] bytes);
                        String(字节数组 byte[] bytes,开始下标,个数);
                字符数组转成字符串,不查询编码表
                        String(字节数组 char[] ch);
                        String(字节数组 char[] ch,开始下标,个数);
                3判断
                A两个字符串内容是否相同
                        boolean equals(Object obj);
                        boolean equalsIgnoreCase(String str);忽略大写比较字符串内容
                B字符串是否包含指定字符串
                        boolean contains(String str);
                C字符串是否以指定字符串开头,是否以字符串结尾
                        boolean startsWith(String prefix);
                        boolean endsWith(String prefix);
                D字符串是否有内容
                        boolean isEmpty();
                4比较
                        int compareTo(String anotherString);按字典顺序比较两个字符串


StringBuffer字符缓冲区
        线程安全的可变字符序列。
        1长度的可变的
        2可以存储不同类型的数据
        3最终要转成字符串进行使用
        4可以对字符串进行修改
        既然是一个容器对象,应该具备什么功能?
        1添加
        StringBuffer append(date);
        StringBuffer insert(index,data);
        append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
        2删除
        StringBuffer delete(start,end)//包含头,不包含尾
        StringBuffer deleteCharAt(int index);删除指定位置的元素
        3查找
        char charAt(index);返回此序列中指定索引处的 char 值。
        int indexOf(string);返回第一次出现的指定子字符串在该字符串中的索引。
        int lastIndexOf(string);
        4修改
        StringBuffer repalce(start,end,string);使用给定 String 中的字符替换此序列的子字符串中的字符,将指定的 String 插入 start.
        void setCharAt(index,char); 将给定索引处的字符设置为 ch。
        增删改查C(create)U(update)R(repalce)D(delete);
        }
}
        jdk1.5后出现了功能和StringBuffer一模一样的对象。就是StringBuildeer
        不同的是:Stringbuffer是线程同步的,通常用于多线程。
        Stringbuilder是线程不同步的,通常用于单线程,它的出现提高效率


public class Test
{
        //一个子串在整串中出现的次数。
        public static void main(String[[] args){
                String str="nbaernbatnbaynbauinbaopnba";
                String key= "nba";
                int count=getKeyStringCount_1(str,key);
                System.out.println(count);
        }
        public static int getKeyStringCount_1(String str,String key){
                //定义计数器
                int count=0;
                //定义变量记录key出现的位置
                int index=0;
                while ((index=str.indexOf(key))!=-1){
                /*indexOf(String str);返回指定子字符串在此字符串中第一次出现处的索引。
                当为-1时,如果它不作为一个子字符串出现,则返回 -1。*/
                        str=str.substring(index+key.length());
                /*substring(int beginIndex);返回一个新的字符串,它是此字符串的一个子字符串。
                循环执行的是index+key.length();每一次循环从key出现位置的下一次开始.*/
                        count++;
                }
                return count;
        }
}

public class Test2
{
        //两个字符串中最大相同的子串
        public static void main(String[] args){
                String s1="qwerabcdtyuiop";;
                String s2="xcabcdvbn";
                String s=getMaxSubString(s1,s2);
                System.out.println(s);
        }
        public static String getMaxSubString(String s1,String s2){
                String man=null.min=null;
                //定义两个变量获取两个字符串的长度
                max=(s1.length()>s2.length())?s1:s2;
                min=max.equals(s1)?s2:s1;
                System.out.println(max,min);
                for (int x=0;x<min.length() ;x++ ){
                        //为什么x<min.length(),从较小字串开始循环,直到这个字符循环结束来判断是否有相同的子串
                        for (int a=0,b=min.length()-x;b!=min.length()+1 ; a++,b++){
                                /*b的初始化变量为min.length()-x(从a++,b--获取一段子串),
                                substring(int beginIndex,int endIndex)返回一个新字符串,它是此字符串的一个子字符串。
                该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。
                因此,该子字符串的长度为 endIndex-beginIndex。*/
                                String sub=min.substring(a,b);
                                if (max.contains(sub){
                                        return sub;
                                }
                        }
                        return null;
                }
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2