黑马程序员-JAVA基础-String 类(下)

 

 

一:模拟一个trim 方法 , 去除字符串两端的空格

  1、判断字符串第一个位置是否是空格,如果是继续向下判断,知道不是空格为止。 结尾也是。

  2、当开始和结尾都判断到不是空格时,就是要获取的字符。

 1 public class TrimText {
 2     public static void main(String args[])
 3     {
 4         String str = "  There are no accidents.       " ; 
 5         System.out.println(MyTrim(str)) ;
 6     }  
 7     public static String MyTrim(String str)
 8     {
 9         int start = 0 , end = str.length() - 1  ; 
10         
11         while(start <= end && str.charAt(start) == ' ')
12                 start ++;
13         while(end >= start && str.charAt(end) == ' ')  
14                 end -- ;
15         return str.substring(start , end + 1) ; 
16     }
17 }

  在第11行和第13行判断字符串开始和结尾的非空格字符的角标。

二:将字符串进行反转和将字符串中指定部分进行反转。

  1、将字符串转换成字符数组。

  2、将字符数组反转。

  3、将反转的字符数组转换成字符串。

代码如下:

 1 public class Text2 {
 2     public static void main(String args[])
 3     {
 4         String str = "There are no accidents." ; 
 5         System.out.println(ReverseString(str));
 6         System.out.println(ReverseString(str,0,5));
 7     }
 8 //    将部分字符串反转
 9     public static String ReverseString(String str , int start , int end)
10     {
11 //        将字符串转换成字符数组:
12         char[] ch = str.toCharArray() ; 
13 //        将数组反转: 
14         Reverse(ch , start , end) ;
15         return String.copyValueOf(ch) ;
16     }
17 //    定义字符串反转函数:
18     public static String ReverseString(String str)
19     { 
20         return ReverseString(str,0,str.length()) ;
21     }
22 //    反转函数:
23     public static void Reverse(char[] ch , int start , int end)
24     {
25         for (int i = start , j = end - 1 ; i < j ; i++ , j--)
26         {
27             swap(ch , i , j) ;
28         }
29     }
30 //    换位置函数 ; 
31     public static void swap(char[] ch , int i ,int j)
32     {
33         char temp  = ch[i] ; 
34         ch[i] = ch[j]  ;
35         ch[j] = temp ; 
36     } 
37 }

 

  总结:在编程时将功能细化。编写特定功能的方法,方便检查和调用。如上面代码,将字符数组的反转功能、位置交换等功能编写特定的方法。

三:获取一个字符串str在另一个字符串中出现的次数。

  1、定义一个计数器。

  2、获取str在另一字符串中第一次出现的位置。

  3、从第一次出现的位置后剩余的字符串中继续获取str在另一字符串出现的位置。

  4、当获取不到时,计数完成。

代码如下:

 1 public class Text3 {
 2 
 3     public static void main(String args[])
 4     {
 5         String str = "ababababababaccccceeeassefefadsfa" ;
 6         String str1 = "ab" ;
 7         System.out.println(Counter_2(str,str1));
 8         System.out.println(Counter(str,str1));
 9     }
10 //    定义计数器:
11     public static int Counter(String str , String str1 )
12     { 
13         if (str.length() < str1.length())
14             return 0 ;
15         int start = str.indexOf(str1) ;
16         if ( start == -1 ) 
17             return 0 ;
18         else 
19         { 
20             return  1 + Counter(str.substring(start + str1.length()) ,str1) ;
21         } 
22     }
23 //    定义计数器2
24     public static int Counter_2(String str , String str1)
25     {
26         int count = 0 ;
27         int index = 0 ; 
28         while (str.indexOf(str1,index) != -1)
29         {
30             index = index + str1.length() ;
31             count ++ ; 
32         }
33         return count ;
34     }
35 }

 

     注意:不能用split 方法来处理该问题。如果 str = "kkdfwefadfkkfaewf" , str1 = "kk" 时,用splik 方法会将 str 字符串分割成三份。 

四:获取两个字符串中最大相同子串。

  1、将短的那个字符串长度递减的方式获取到。

  2、将每一份获取到的子串去长串中判断是否是子串。如果是,则返回。

代码如下:

 1 public class Text4 {
 2     
 3     public static String GetMaxSubString(String str , String str1)
 4     {
 5         String Max = "" , Min = "" ; 
 6 //        判断谁长谁短
 7         Max = (str.length() > str1.length()) ? str : str1 ;
 8         Min = ( Max == str) ? str1 : str ;
 9         
10 //        将短的那个字符串长度递减的方式获取到。
11 //        DecreaseLength是递减的长度大小。
12 //        从0到 Min.length() - 1 ;
13         for(int DecreaseLength = 0 ; DecreaseLength < Min.length() ; DecreaseLength ++)
14         {
15 //              循环  start至end 长度的的子串去判断长字符串中是否包含。 
16             for (int start = 0 , end = Min.length() - DecreaseLength ;
17                 end != Min.length() ; end ++ , start ++ )
18             {
19                 String temp = Min.substring(start,end ) ; 
20                 if (Max.contains(temp))
21                     return temp ;
22             }
23         }
24         return "" ; 
25     } 
26     public static void main(String args[])
27     {
28         String str = "adsfwefahellocvbve" ; 
29         String str1 = "hellofqfadfx" ;
30         System.out.println(GetMaxSubString(str,str1));
31     }
32 }

 

 

posted @ 2013-03-23 02:22  贺佐安  阅读(301)  评论(0编辑  收藏  举报