黑马程序员---String练习中体现的思想

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

 

/*
1,模拟一个trim方法,去除字符串两端的空格。
           思路:
           1,判断字符串第一个位置是否是空格,如果是继续向下判断,直到不是空格为止。
                  结尾处判断空格也是如此。
           2,当开始和结尾都判断到不是空格时,就是要获取的字符串。
*/

public static void sop(Object obj) //打印 {    System.out.println(obj); }

 

public static String trimTest(String str) //实现trim的功能  {    int beginIndex = 0;    int endIndex = str.length()-1;    while( beginIndex<=endIndex && str.charAt(beginIndex)==' ' )    {     beginIndex++;    }    while( beginIndex<=endIndex && str.charAt(endIndex)==' ' )    {     endIndex--;    }    return str.substring(beginIndex,endIndex+1);  }

 
/*
2,将一个字符串进行反转。将字符串中指定部分进行反转,"abcdefg";abfedcg
         思路:
         1,曾经学习过对数组的元素进行反转。
         2,将字符串变成数组,对数组反转。
         3,将反转后的数组变成字符串。
         4,只要将或反转的部分的开始和结束位置作为参数传递即可。
*/

 

private static void reverse(char[] ch, int x, int y)//将字符数组中指定的一部分反转  {    for(int start=x,end=y-1;start<end;start++,end--)    {     swap(ch,start,end);    }  }

 private static void reverse(char[] ch)//反转字符数组  {    for(int start=0,end=ch.length-1;start<end;start++,end--)    {     swap(ch,start,end);    }  }

 private static void swap(char[] ch, int x, int y)//交换字符  {    char temp = ch[x];    ch[x] = ch[y];    ch[y] = temp;  }

 public static String reverseString(String str, int x, int y) //将字符串中指定部分反转  {    char[] ch = str.toCharArray();    reverse(ch,x,y);    return new String(ch);  }

 public static String reverseString(String str)//将字符串反转  {    char[] ch = str.toCharArray();    reverse(ch);    return new String(ch);  }

 
/* 
3,获取一个字符串在另一个字符串中出现的次数。
         "abkkcdkkefkkskk"
         思路:
         1,定义个计数器。
         2,获取kk第一次出现的位置。
         3,从第一次出现位置后剩余的字符串中继续获取kk出现的位置。
              每获取一次就计数一次。
         4,当获取不到时,计数完成。
*/
初期想法:

public static int stringCount(String str1, String str2)//获取str2在str1中出现的次数  {    int count = 0;    for(int x=0; x<str1.length(); x++)    {     if( ( ( x+str2.length() ) <= str1.length() ) && str1.substring( x,x+str2.length() ).equals(str2) )     {      count++;      x = ( x + ( str2.length()-1 ) );     }    }    return count;  }

演变:

public static int containCount(String s1, String s2)//获取s2在s1中出现的次数  {    int count = 0;    while( s1.contains(s2) )    {     count++;     s1 = s1.substring( s1.indexOf(s2) + s2.length() );    }    return count;  }

再演变:(为了不在内存中产生那么多字符串) 

public static int getSubCount(String str, String key)//获取key在str中出现的次数  {    int count = 0;    int index = 0;    while( ( index=str.indexOf(key,index) ) != -1 )    {     count++;     index = index+key.length();    }    return count;  }

 
/*
4,获取两个字符串中最大相同子串。第一个动作:将短的那个串进行长度一次递减的子串打印。
         "abcwerthelloyuiodef"
         "cvhellobnm"
         思路:
          1,将短的那个子串按照长度递减的方式获取到。
          2,将每获取到的子串去长串中判断是否包含,
                   如果包含,已经找到!。
*/
 
思想:( 短串尾减一,整串向后移,每次移动一位,直到end等于短串的length() )
黑马程序员_String练习中体现的思想 - 油菜花 - 油菜地
 
 

public static String maxSameString(String s1, String s2)//求两个字符串中最大相同子串  {    String max = ( s1.length() > s2.length() ) ? s1 : s2 ;    String min = (max==s1) ? s2 : s1 ;

   sop("max = "+max+"........min = "+min);

   for(int x=0; x<min.length(); x++)//短的的长度————短字符串能减短的次数。    {     for(int y=0,z=min.length()-x; z<=min.length(); y++,z++)//y是头,z是尾。     {      String temp = min.substring(y,z);      //sop(temp);      if(max.contains(temp))      {       return temp;      }     }    }    return "";  }

 
 

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值