关于字符串的运用(去除空格,反转,统计次数,最长公共子串)

来源:互联网 发布:淘宝如何设置限购 编辑:程序博客网 时间:2024/06/04 01:21

整理昨天的笔记,做了几个字符串的问题,感觉还不错,

package com.an.test.teststring;import org.junit.Test;public class TestString {//1、模拟一个trim方法,去除字符串两端的空格。@Testpublic void test() {//方法一//String str1 = "  我爱Java   ";//char[] str2 = str1.toCharArray();//int start = 0;//int end = str2.length-1;//for(int i=0;i<str2.length;i++){//if(str2[i] == ' '){//start++;//}else{//break;//}//}////for(int i=end;i>=0;i--){//if(str2[i] == ' '){//end--;//}else{//break;//}//}//String str3 = str1.substring(start,end+1);//System.out.println(str3);//方法二:String str4 = "   我爱Java  ";while(str4.startsWith(" ")){str4 = str4.replaceFirst(" ", "");}System.out.println("[" + str4 + "]");while(str4.endsWith(" ")){str4 = str4.substring(0, str4.length()-1);}System.out.println("[" + str4 + "]");}//将一个字符串进行反转。将字符串中指定部分进行反转。//比如将“abcdefgho”反转为”abfedcgho”    @Testpublic void test1(){    String reverse = reverse("abcdefgho",2,6);    System.out.println(reverse);}      public String reverse(String res,int start,int end){    //把这个字符串分为3段,左边  中间的   右边的。对其中间的进行逆转    String left = res.substring(0, start);    String right = res.substring(end);    String middle = res.substring(start, end);    char[] char1 = middle.toCharArray();    for(int i=0,j=char1.length-1;i<char1.length/2;i++,j--){    char temp = char1[i];    char1[i] = char1[j];    char1[j] = temp;    }    String str = "";    for(int i=0;i<char1.length;i++){    str = str + char1[i];    }    System.out.println(str);    res = left + str + right;return res;    }    //3、获取一个字符串在另一个字符串中出现的次数。    //比如:获取"ab"在 “abababkkcadkabkebfkabkskab”中出现的次数    @Test    public void test2(){    String str1 = "abababkkcadkabkebfkabkskab";    String str2 = "ab";        int count = count(str1,str2);    System.out.println(count);    }      public int count(String res,String find){    int count = 0;    while(res.contains(find)){    count++;    int index = res.indexOf(find);    res = res.substring(index+find.length());    }return count;    }                //很想最长公共子串(LCS),但是LCS很难理解的.小菜不懂LCS算法    //获取两个字符串中最大相同子串。比如:    //str1 = "abcwerthelloyuiodefm“;str2 = "cvhellobnm"    //提示:将短的那个串进行长度依次递减的子串与较长的串比较。    @Test    public void test4(){    String maxSub = getMaxSub("abcwerthelloyuiodefm", "cvhellobnm");    long end = System.currentTimeMillis();System.out.println(maxSub);    }        public static String getMaxSub(String str1 ,String str2){//1、找出str1和str2谁长谁短, String max = str1.length() > str2.length() ? str1 : str2;String min = str1.length() < str2.length() ? str1 : str2;/*此题思想:外循坏,就是从短的字符串的第一个位置开始,记为左边. *内循环,就是要截取多少次.截取时,就是从left位置开始截取,外循环一次,left往前动一位. *内循环就是要从left位置开始截取,截取到倒数第一个、第二个、.....第left个 * *  * */String result = "";int count = 0;for(int left = 0; left <min.length(); left++){//left = 0,9for(int right = 0; right < min.length()-left; right++){//left = 0, right = 0,1,..9    第一轮,内循环循环10//left = 1, right =0 ,8   第二轮,内循环执行//...String str = min.substring(left,min.length()-right);if(max.contains(str)){//System.out.println("str:"+str);//System.out.println("result:"+result);if(str.length() >= result.length()){//System.out.println("str111:"+str);result = str;count++;}}}}System.out.println(count);return result;}    }


阅读全文
0 0
原创粉丝点击