黑马程序员--java基础之String类中一些方法的代码原理

练习一:模拟trim方法,去除字符串中的开头结尾空格。

             提示:1、String类提供的方法为String trim();

                       2、需要用的方法有char charAt(int index);返回index索引的字符;

                       3、用String substring(int beginIndex,int endIndex);

1
2
3
4
5
6
7
8
9
10
class StringTest{  
    public static String myTrim(String str){
        int begin = 0;
        int end = str.length()-1;
        while(begin<=end && str.charAt(begin) == ' ')
            begin++;
        while(begin<=end && str.charAt(end) == ' ')
            end--;
        return str.substring(start, end+1);
    }

练习二:将字符串中的字符反转;

      提示:1、java中提供了StringBuffer类,此类中有static String reserse()方法;

                2、首先需要将此字符串转换成字符数组,用String类中的char [] = str.toCharArray()方法;

                3、将字符数组中的字符反转,用for循环;

                4、将得到的字符数组转换成字符串,用new String(char [] chs);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class StringTest{
       public static String reverseString(String str){
        char [] chs = str.toCharArray();
        replace(chs);
        return new String(chs);
    }
    private static void replace(char [] chs){
        for(int begin=0, end=chs.length-1; begin<end; begin++,end--)        
            swap(chs,begin,end);       
    }
        
    private static void swap(char [] chs,int x,int y){
        char temp = chs[x];
        chs[x] = chs[y];
        chs[y] = temp;
    }

练习二的优化:

        目的:可以随意反转字符串中的任意一段字符串;

        提示:重载reverseString()方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class StringTest{
        public static String reverseString(String str,int begin, int end){
        char [] chs = str.toCharArray();
        replace(chs,begin,end);
        return new String(chs);
    }
    public static String reverseString(String str){    
        return reverseString(str, 0, str.length());
    }
      
    private static void replace(char [] chs,int begin, int end){
        for(int x=begin, y=end-1; x<y; x++,y--)         
            swap(chs,x,y);     
    }
      
    private static void swap(char [] chs,int x,int y){
        char temp = chs[x];
        chs[x] = chs[y];
        chs[y] = temp;
    }
}

练习三:从指定字符串中寻找子字符串出现的次数,例:abccdhccjkjlcclkjkcc寻找cc出现的次数;

             提示:1、用到String类中的int str.indexOf(str1,index)方法;

                       2、while循环的条件是(index=str.indexOf(str1,index))!=-1;

                       3、循环内部对index重新赋值为index+str2.length();

1
2
3
4
5
6
7
8
9
10
11
12
class StringTest{
        public static int indexOfString(String str, String str1){
        int index = 0;
        int count = 0;
        while((index=str.indexOf(str1,index)) != -1){
            System.out.println(index);
            index = index + str1.length();
            count++;
        }
        return count;
    }
}

练习四:获取字符串中最大的子串,例:"adsfadhellofasdf" "ddhelloff"

            提示:1、首先判断传入的俩个字符串哪个是大的哪个是小的;

                      2、利用大圈套小圈方法循环,外层控制每次减少的字符数,从0到小字符串的长度; 内层控制小字符串的比较次数,需要定义倆个变量,一个是控制字符串开始比较的位置,从0开始,另一个是控制字符串结束比较的位    置;条件是第二个变量的值不等于小字符串的长度

                      3、用String类的String str1.substring(y,z)方法获取到剪掉后的字符串;

                            再用String类的boolean str.contains(temp)判断是否相同

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class StringTest{       
        public static String getMaxString(String str, String str1){
        String max = str.length() > str1.length() ? str : str1;
        String min = (max == str) ? str1 : str;    
        for(int i=0; i<min.length(); i++){
            for(int y=0, z=min.length()-i; z!=min.length()+1; y++,z++){
                String temp = min.substring(y,z);
                if(max.contains(temp))
                return temp;           
            }
        }
        return " ";
        //System.out.println(temp);
    }*/
    public static void main(String [] args){
        //String str = "    abd dk    ";
        String str = "adsfadhellofasdf";
        String str1 = "ddhelloff";
        str = myTrim(str);
        System.out.println(getMaxString(str,str1));
         
        //System.out.println(reverseString(str));
        //System.out.println(indexOfString(str,"cc"));
    }
}

 

posted @ 2013-04-06 00:01  郭彦君  阅读(248)  评论(0编辑  收藏  举报