下面是毕老师给出的四道String 练习题:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /* 
  2.  * Test the String exercises. 
  3.  * 1: 模仿trim方法 public String trim() 
  4.  * 2: 实现字符串反转;将字符串中指定部分反转 
  5.  * 3: 获取一个字符串在另一个字符串中出现的次数 
  6.  * 4: 获取两个字符串中最大相同子串 
  7.  * @author: Lillian Mao 
  8.  *  
  9.  */  
  10. class StringTool{  
  11.     /* 
  12.      * 模仿trim方法 public String trim(),将字符串中前后的空格去掉。 
  13.      * 1. 先将字符串转换为char[] 数组 
  14.      * 2. 从前面开始找第一个不是空格的字符,记录下标 
  15.      * 3. 从后面找第一个不是空格的字符,记录下标 
  16.      * 4. 从原来字符串中截取两个下标中间的部分,注意subString(start, end)中end应该传递后面找到的下标加一的值。 
  17.      */  
  18.     public String myTrim(String inputStr){  
  19.         int max = inputStr.length()-1;  
  20.         int min = 0;  
  21.         char[] array = inputStr.toCharArray();  
  22.         while(min<=max && array[min] == ' ')  
  23.             min++;  
  24.         while(min<=max && array[max] == ' ')  
  25.             max--;  
  26.           
  27.         String s = inputStr.substring(min, max + 1);  
  28.         return s;  
  29.     }  
  30.       
  31.     /* 
  32.      * 将一个字符串指定部分进行反转。 
  33.      * 1. 将字符串转换成字符数组 
  34.      * 2. 将要反转的部分首尾互换 
  35.      * 3. 将数组转换为字符串 
  36.      *  
  37.      */  
  38.     public String reverse(String input, int start, int end) {  
  39.         char[] array = input.toCharArray();  
  40.         if(start <0 || end >= input.length()){  
  41.             throw new ArrayIndexOutOfBoundsException();         
  42.         }  
  43.         while(start < end){  
  44.             char c = array[start];  
  45.             array[start] = array[end];  
  46.             array[end] = c;  
  47.             start++;  
  48.             end--;  
  49.         }  
  50.           
  51.         return new String(array);  
  52.     }  
  53.       
  54.     /* 
  55.      * 获取一个字符串在另一个字符串中出现的次数 
  56.      * 1. 设置一个计数器c,一个起始位置s,初始化为0。 
  57.      * 2. 如果找到一次,c++, 起始位置设为本次找到的子字符串的末尾。继续下次循环,直至index 为-1 
  58.      */  
  59.     public int GetCount(String longStr, String shortStr){  
  60.         int count=0, start=0, index =0;  
  61.         while((index = longStr.indexOf(shortStr,start))!= -1){  
  62.             count++;  
  63.             start = index + shortStr.length();  
  64.         }  
  65.         return count;  
  66.     }  
  67.       
  68.     /* 
  69.      * 获取两个字符串中最大相同子串 
  70.      * 1. 找到比较小的那个字符串 
  71.      * 2. 将较小字符串一次递减,去掉前面或者后面n个字符 
  72.      * 3. 在较大字符串中查找减小后的字符串,若找到返回该字符串 
  73.      */  
  74.     public String largestSub(String str1, String str2){  
  75.         char[] array = str2.toCharArray();  
  76.         if(str1.length()<= str2.length()){  
  77.             array = str1.toCharArray();  
  78.             str1=str2;  
  79.         }  
  80.         String sub = null;  
  81.         for (int len = array.length; len >0; len--) {  
  82.             for(int start =0; start <= str2.length()-len; start++){  
  83.                 sub = String.copyValueOf(array, start, len);  
  84.               
  85.                 if(str1.contains(sub))  
  86.                     return sub;  
  87.             }  
  88.         }  
  89.         sub = null;  
  90.         return sub;  
  91.     }  
  92. }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值