字符串——String 练习

练习一:模拟trim()方法

public class Test {
 public static void main(String[] args){
 
  String str = " asdfa ";
  String str2 = myTrim(str);
  System.out.println("<"+str+">");
  System.out.println("<"+str2+">");
 }
  
public static String myTrim(String str){
  int start = 0; //字符串的前角标
  int end = str.length()-1; //字符串的后角标
  
  /*先进行角标判断(start不能超过end);再进行字符串中角标为start的字符是否为' '
   *如果为空格,则start的角标向后一步,知道start角标的字符部位空格,start角标自加停止
   * */
  while(start <= end && str.charAt(start) == ' '){
   start++;
  }
  
  /*先进行角标判断(start不能超过end);再进行字符串中角标为end的字符是否为' '
   *如果为空格,则end的角标向前一步,知道start角标的字符部位空格,start角标自减停止
   * */
  while(start <= end && str.charAt(end) == ' '){
   end--;
  }
  
  /*将字符串中角标为start与end之间的子串截取出来,注意包含头,不会包含尾,end要加1*/
  return str.substring(start,end+1);
 }
}





练习二:将字符串反转


public class Test {
 public static void main(String[] args){
  
  String str = " ad cb ";
  System.out.println(str);
  System.out.println(reverseString(str));
 }
  
 public static String reverseString(String str){
  /*将字符串转换为字符数组*/
  char arr[] = str.toCharArray();
  
  /*将字符数组前后调换*/
  reverse(arr);
  /*将字符数组转化为字符串*/
  return new String(arr);
  
 }
 public static void reverse(char[] arr){
  for(int start = 0,end = arr.length-1;start<end;start++,end--){
   swap(arr,start,end);
  }
 }
 public static void swap(char[] arr,int x,int y){
  
  /*数组为引用数据类型,所以只需相互交换,不需要返回就可以实现,其实在对内存中数组已经相互交换了*/
  char temp;
  temp = arr[x];
  arr[x] = arr[y];
  arr[y] = temp;
 }
}



 
现在增加一个需求:实现字符串中指定角标的互换。


public class Test {
 public static void main(String[] args){
  String str = " ad cb ";
  System.out.println(str);
  System.out.println(reverseString(str));
 }
  
  
 public static String reverseString(String str,int start,int end){
  /*将字符串转换为字符数组*/
  char arr[] = str.toCharArray();
  
  /*将字符数组前后调换*/
  reverse(arr,start,end);
  /*将字符数组转化为字符串*/
  return new String(arr);
  
 }
  
 public static String reverseString(String str){
  return reverseString(str,0,str.length());
  
 }
 public static void reverse(char[] arr,int x,int y){
  for(int start = x,end = y-1;start<end;start++,end--){
   swap(arr,start,end);
  }
 }
 public static void swap(char[] arr,int x,int y){
  
  /*数组为引用数据类型,所以只需相互交换,不需要返回就可以实现,其实在对内存中数组已经相互交换了*/
  char temp;
  temp = arr[x];
     arr[x] = arr[y];
  arr[y] = temp;
 }
}



 




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


public class Test {
 public static void main(String[] args){
 
  String str = "asdkkadsfasdkkadsfkksdfktk";
  System.out.println(getSubCount(str,"kk"));
  
 }
  
 public static int getSubCount(String str,String key){
  int index = 0;
  int count = 0;
  
  while((index=str.indexOf(key, index)) != -1){
   System.out.println("index= "+index);
   index = index + key.length();
   count++;
  }
  return count;
 }
}




 
练习四:获取两个字符串中相同的最大字符串
              首先:要对长度较短的字符串进行长度依次递减的子串打印


public class Test {
 public static void main(String[] args){
  
  String s1 = "asfhellosdfa";
  String s2 = "whellow";
  System.out.println(getMaxSubString(s1,s2));
 }
  
 public static String getMaxSubString(String s1,String s2){
  String temp;
  String max = "",min = "";
  max = (s1.length()>s2.length())?s1:s2;
  min = (max == s1)?s2:s1;
  
  for(int sublength = 0;sublength < min.length();sublength++){
   for(int start = 0,end = min.length()-sublength;end < min.length()+1;start++,end++){
    temp = min.substring(start,end);
//   System.out.println(temp);
    if(max.contains(temp))
     return temp;
   }
  }
  return "";
 }
}


注意: 大圈套小圈原理中,最外层的递增是:整个字符串要减去的字符串的长度(第一轮要 减去0个,得到 一个子串,然后对这一个子串进行判断;第二轮要 减去个,得到 两个子串,然后对这两个子串进行判断;第三轮要 减去两个,得到 三个子串,然后对这三个子串分别进行判断、、、、、、)



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值