Java语言基础-常用对象API(一)String、StringBuffer

String类-常见功能

字符串是一个特殊的对象;
字符串一旦初始化就不可以被改变;

package cn.itcast.p1.stirng.demo;

public class StringDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {

        /*
         * String类的特点
         * 字符串对象一旦被初始化就不会被改变
         */
        stringDemo2();
    }

    private static void stringDemo2() {
        String s="abc";//在常量池中创建了"abc"字符串
        String s1=new String("abc");//创建两个对象,一个new,一个子字符串,在堆内存中
//        System.out.println("s="+s);
//        System.out.println("s="+s1);
        System.out.println(s==s1);//false,地址不同
        System.out.println(s.equals(s1));//true,String类覆写了Object类中的equals方法
                                        //字符串的equals比较的是内容
    }

    /**
     * 演示字符串定义的第一种方式,并明确字符串常量池的特点
     * 池中没有则建立,池中有则直接使用
     */
    private static void stringDemo1() {
        String s="abc";//"abc"存储在常量池中
        String s1="abc";
        System.out.println(s==s1);//true
//        System.out.println("s="+s);
    }
} 

按面向对象的思想对字符串进行功能分类
1.获取:
    1.1 获取字符串中字符的个数(长度);
            int length();
    1.2 根据位置获取字符;
            char charAt(int index);
    1.3 根据字符,获取在字符串中第一次出现的位置;
            int indexOf(int ch);
            int indexOf(int ch,int fromIndex);//从指定位置进行查找ch第一次出现的位置,如果未出现该字符则返回-1
            int indexOf(String str);int indexOf(String str,int fromIndex);
           
            int lastIndexOf(int ch); // 返回指定字符在此字符串中最后一次出现处的索引
            int lastIndexOf(int ch,int fromIndex);//返回指定字符在此字符串中最后一次出现处的索引,
                                                //从指定的索引处开始进行反向搜索
            int lastIndexOf(String str);int lastIndexOfndexOf(String str,int fromIndex);
    1.4 获取字符串中的一部分字符串,也叫子串
            String substring(int beginIndex, int endIndex);//从beginIndex开始到endIndex-1,包含begin而不包含end
            String substring(int beginIndex);
            示例:
           

private static void stringMethodDemo_1() {
            String s="abcdae";
            System.out.println("length="+s.length());//6
            System.out.println("char="+s.charAt(2));//c
            System.out.println("index="+s.indexOf('a'));//0
            System.out.println("index="+s.indexOf('k'));//-1,可以根据-1来判断字符或者字符串是否存在
            System.out.println("lastIndex="+s.lastIndexOf('a'));//4
            System.out.println("substring="+s.substring(2,4));//cd
        }

2.转换:
    2.1 将字符串转成字符串数组(字符串的切割);
            String[] split(String regex);//涉及到正则表达式
    2.2 将字符串转成字符数组;
            char[] toCharArray();
    2.3 将字符串转成字节数组;
            byte[] bytes=s.getBytes();
    2.4 将字符串中的字母转换大小写;
            String toUpperCase();//转为大写
            例:System.out.println("abc".toUpperCase());
            String toLowerCase();//转为小写
    2.5 将字符串中的内容进行替换;
            String  replace(char oldChar,char newChar);
            例:System.out.println("java".replace('a','o'));
            如果替换失败,则返回原字符串(地址不变)
            String  replace(String s1,String s2);
    2.6 将字符串两端的空格去除
            String trim();//返回字符串的副本,忽略前导空白和尾部空白
            例:System.out.println("-"+"  a  b  c  ".trim()+"-");//-a  b  c-
    2.7 将字符串进行连接
            String concat(string);
            例:System.out.println("abc".concat("kk"));

private static void stringMethodDemo_2() {
        String s="张三,李四,王五";
        String[] arr=s.split(",");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        char[] chs=s.toCharArray();
        for (int i = 0; i < chs.length; i++) {
            System.out.println(chs[i]);
        }    
        s="ab你";
        byte[] bytes=s.getBytes();
        for (int i = 0; i < bytes.length; i++) {
            System.out.println(bytes[i]);
        }
    }

3 判断
    3.1 两个字符串内容是否相同
            boolean equals(Object obj);
            booleam equalsIgnoreCase(string str);//忽略大小写比较字符串内容是否相同
            例:System.out.println(s.equalsIgnoreCase("ABC"));
    3.2 字符串中是否包含指定字符串
            boolean contains(string str);
            例:System.out.println(s.contains("ab"));
    3.3 字符串是否以指定字符串开头,是否以指定字符串结尾
            boolean startsWith(string);
            boolean endsWith(string);
            例:String str="ArrayDemo.java";
                        System.out.println(str.startsWith("Array"));//true
                        System.out.println(str.endsWith(".java"));//true

4 比较
    int compareTo(string);
    例:System.out.println("a".compareTo("c"));//-2

        intern方法
        intern():对字符串池进行操作、

String类练习

package cn.itcast.p1.stirng.demo;
/*
 * 1.给定一个字符串数组,按照字典书序进行从小到大的排序
 * {"nba","abc","cba","zz","qq","haha"}
 * 思路:
 * 1.对数组排序。可以用选择、冒泡法等排序。
 * 2.for嵌套、比较以及换位
 * 3.对象中提供了用于字符串比较的功能
 */
public class StringTest1 {
    public static void main(String[] args) {
        String[] arr = { "nba", "abc", "cba", "zz", "qq", "haha" };
        printArray(arr);
        sortString(arr);
        printArray(arr);
    }

    public static void printArray(String[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if (i != arr.length - 1)
                System.out.print(arr[i] + ",");
            else
                System.out.println(arr[i] + "]");
        }
    }

    public static void sortString(String[] arr) {
        for (int i = 0; i < arr.length-1; i++) {
            for(int j=i+1; j < arr.length; j++) {
                if(arr[i].compareTo(arr[j])>0)//字符串比较用compareTo方法
                    swap(arr,i,j);
            }
        }
    }

    private static void swap(String[] arr, int i, int j) {
        String temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }
}
/*
 *输出结果
 *[nba,abc,cba,zz,qq,haha]
 *[abc,cba,haha,nba,qq,zz]
 */


 

package cn.itcast.p1.stirng.demo;
/*
 * 2.一个子串在整串中出现的次数
 * "nbaernbatynbauinbaopnba"
 * 思路:
 * 1.获取要找的子串是否存在,如果存在,获取其出现的位置 ,这个可以使用indexOf()完成
 * 2.如果找到了,那么记录出现的位置并在剩余的字符串中继续查找该子串,
 * 剩余字符串的起始位置为出现位置+子串长度
 * 3.以此类推,通过循环完成查找,如果找不到就是-1,并在每次找到时用计数器count记录
 */
public class StringTest2 {

    public static void main(String[] args) {
        String str = "nbaernbatynbauinbaopnba";
        String key = "nba";
//        int count = getKeyStringCount(str, key);
        int count = getKeyStringCount_2(str, key);
        System.out.println("count=" + count);
    }

    private static int getKeyStringCount_2(String str, String key) {
        int count=0;
        int index=0;
        while((index=str.indexOf(key,index))!=-1){
            index=index+key.length();
            count++;
        }
        return count;
    }

    /**
     * 获取子串在整串中出现的次数
     * @param str
     * @param key
     * @return
     */
    private static int getKeyStringCount(String str, String key) {
        // 1.定义计数器
        int count = 0;

        // 2.定义变量记录key出现的位置
        int index = 0;

        while ((index = str.indexOf(key)) != -1) {
            str = str.substring(index + key.length());
            count++;
        }

        return count;
    }
}

 

package cn.itcast.p1.stirng.demo;
/*
 * 3.两个字符串中最大相同的子串
 * "qwerabcdtyuiop"
 * "xcabcdxbn"
 * 思路:
 * 1.取的是最大子串,先看短的字符串是否是长字符串的子串;
 * 2.如果存在,则短串就是最大子串;
 * 3.如果不是,则将短串以递减的方式取子串,去长串中是否存在;
 * 4.如果存在,就已找到最大子串,否则重复3。
 */
public class StringTest3 {
    public static void main(String[] args) {
        String s1="qwerabcdtyuiop";
        String s2="xcabcdxbn";
        String s=getMaxSubString(s1,s2);
        System.out.println("s="+s);
    }
    /**
     * 获取最大子串
     * @param s1
     * @param s2
     * @return
     */
    private static String getMaxSubString(String s1, String s2) {
        String max=null,min=null;
        max=(s1.length()>s2.length()?s1:s2);
        min=max.equals(s1)?s2:s1;
        for(int x=0;x<min.length();x++){
            for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++){
                String sub=min.substring(y,z);
//                System.out.println(sub);
                if(max.contains(sub))
                    return sub;
            }
        }
        return null;
    }
}
package cn.itcast.p1.stirng.demo;

/*
 * 4.模拟一个trim功能一致的方法,去除字符串两端的空白
 *     1.定义两个变量,一个变量作为从头开始判断字符串空格的下标(++);
 *     另一个从尾开始判断(--);
 *     2.判断到不是空格为止,取首尾之间的子串即可;
 */
public class StringTest4 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String s = "      ab    c     ";
        s = myTrim(s);
        System.out.println("-" + s + "-");
    }

    public static String myTrim(String s) {
        int start = 0, end = s.length() - 1;
        while (start <= end && s.charAt(start) == ' ') {
            start++;
        }
        while (start <= end && s.charAt(end) == ' ') {
            end--;
        }
        return s.substring(start, end + 1);
    }
}

StringBuffer(字符串缓冲区对象)※
StringBuffer就是字符串缓冲区,用于存储数据的容器;
特点:
1.长度是可变的;
2.可以存储不同类型的数据;
3.最终要转成字符串进行使用;
4.可以对字符串进行修改;

既然是容器对象,则应具有什么方法?
1.添加;
        StringBuffer append(data);
        StringBuffer insert(index,data);
2.删除;
        StringBuffer delete(start,end);// 包含头,不包含尾
        StringBuffer deleteAt(int indxe);//删除指定位置元素   
        s.delete(0,s.length());//清空缓冲区
3.查找
        char charAt(index);
        int indexOf(string);
        int lastIndexOf(string);
4.修改
        StringBuffer replace(start,end);//包含头,不包含尾
        void setCharAt(index,char);
        void setLength(int newLength) //设置字符序列的长度
        StringBuffer reverse();// 将此字符序列用其反转形式取代

StringBuffer示例:

public class StringBuilderTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        int[] arr={3,1,5,3,8};
        String s=arrayToString_2(arr);
        System.out.println(s);
    }
    /**
     * 将一个int数组变成字符串
     */
    public static String arrayToString_2(int[] arr){
        StringBuilder sb=new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            if(i!=arr.length-1)
                sb.append(arr[i]+",");
            else
                sb.append(arr[i]+"]");
        }
        return sb.toString();
    }
    public static String arrayToString(int[] arr){
        String str="[";
        for (int i = 0; i < arr.length; i++) {
            if(i!=arr.length-1)
                str+=arr[i]+",";
            else
                str+=arr[i]+"]";
        }
        return str;
    }

}

posted on 2012-07-27 20:44  foolchen  阅读(455)  评论(0编辑  收藏  举报

导航