字符串——String 练习

来源:互联网 发布:淘宝评价显示多长时间 编辑:程序博客网 时间:2024/06/05 03:41
练习一:模拟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个,得到一个子串,然后对这一个子串进行判断;第二轮要减去个,得到两个子串,然后对这两个子串进行判断;第三轮要减去两个,得到三个子串,然后对这三个子串分别进行判断、、、、、、)



0 0
原创粉丝点击