String常用方法的算法题目

1、模拟一个trim()方法,去除字符串两端的空格

public class StringTest {
    public static void main(String[] args) {
        String str = "  abc  ";
        System.out.println("原字符串:******" + str + "******");
        int start =0;
        int end = str.length()-1;
        while (start <= end && str.charAt(start) == ' '){
            start++;
        }
        while (start <= end && str.charAt(end) == ' '){
            end--;
        }
        System.out.println("开始索引为:" + start + " - " + "结束索引为:" + end);
        //substring():截取str原字符串从start索引开始到end索引前生成新字符串str
        str = str.substring(start, end+1);
        System.out.println("新字符串:******" + str + "******");
    }
}

2、将一个字符串进行反转,将字符串中指定部分进行反转。比如“abcdefg”反转为“abfedcg”

str.indexOf():寻找str字符串中的某个字符的索引位置
str.charAt(index):获得str字符串中index位置的字符
StringBuilder是一个用来处理字符串的类,在拼接字符串的时候可以使用"+"
StringBuilder类中有一个reverse()方法,可以直接反转字符串
StringBuilder类中的setCharAt()方法,可以进行一个一个字符交换

public class StringTest {
    public static void main(String[] args) {
//        String str = "abcdefg";
        /** 一开始没看准题目,以为没有顺序,只能使用一个一个字符交换*/
        

//        String s_c = String.valueOf(str.charAt(2));
//        String s_d = String.valueOf(str.charAt(3));
//        String s_e = String.valueOf(str.charAt(4));
//        String s_f = String.valueOf(str.charAt(5));
        //如果是使用String的replace()方法,会替换所有相同的字符;
        //使用StringBuilder的replace()方法,可以指定位置替换字符。
//        StringBuilder sb = new StringBuilder(str);
//        StringBuilder rp = sb.replace(2, 3, s_f);
//        sb.replace(5, 6, s_c);
//        sb.replace(3, 4, s_e);
//        sb.replace(4,5, s_d);
//        System.out.println("“abcdefg”反转为“abfedcg”");
//        System.out.println(str);
//        System.out.println(rp);
        
        
        /**其实题目只是将中间的部分进行了倒序反转,可以反转之后拼接起来*/
        String str = "abcdefg";
        StringBuilder sb = new StringBuilder(str.substring(2, 6));
        System.out.println("“abcdefg”反转为“abfedcg”");
        System.out.println(str);
        System.out.println(str.substring(0, 2) + sb.reverse() + str.substring(6, str.length()));
    }
}

3、获取一个字符串在另一个字符串中出现的次数。比如:获取“ab”在“abkkcadkabkebfkabkskab”中出现的次数

str.indexOf(str1,i):从i位置开始寻找str字符串中的str1的索引位置

public class StringTest {
    public static void main(String[] args) {
        String str = "abkkcadkabkebfkabkskab";
//        String findStr = "ab";
//        int i =0;
//        int count = 0;
//        while(true){
//            if (str.indexOf(findStr, i) == -1){
//                break;
//            }else{
//                i = str.indexOf(findStr, i) + 2;
//                count++;
//            }
//        }
//        System.out.println("出现的次数为:" + count);

        /** 下面这种方法真的是太简单了
        *
        * */
        String newStr = str.replace("ab", "");
        System.out.println("出现的次数为:" + (str.length()-newStr.length())/2);
    }
}

4、获取两个字符串中最大相同子串。 比如:str1 = “abcwerthlloyuiodef”; str2 = “cvhellobnm”; 提示:将短的那个串进行长度依次递减的子串与较长的串比较

在长的字符串中寻找短的字符串,从长到短逐渐寻找,找到匹配的后记录索引位置以及匹配子串长度;

str.indexOf():寻找str字符串中的某个字符的索引位置

str.substring(i, j):截取str字符串中从i到j前的字符串

public class StringTest {
    public static void main(String[] args) {
        String str1 = "abcwerthelloyuiodef";
        String str2 = "cvhellobnm";
        int[][] num = new int[20][20];
        int[] iArr = new int[20];
        int num_Max = 0;
        int i_Max =0;
        for (int i = 0; i<str2.length(); i++){
            for (int j =str2.length(); j>i; j--){
                if (str1.indexOf(str2.substring(i,j))!=-1){
                    num[i][j] = j - i;
                    iArr[i] = i;
                }
            }
        }
        for (int i = 0; i<num.length; i++){
            for (int j = 0; j<num.length; j++){
                 if (num[i][j] != 0 && num[i][j]>num_Max){
                    num_Max = num[i][j];
                    i_Max = i;
                }
            }
        }
        System.out.println("str1:" + str1);
        System.out.println("str2:" + str2);
        System.out.println("最大相同子串:" + str2.substring(i_Max, i_Max + num_Max));
    }
}

5、将字符串中字符进行自然顺序排序。提示:1)字符串编程字符数组;2)对数组排序,选择,冒泡,Arrays.sort();3)将排序后的数组编程字符串。

字符串与字符数组互相转换方法:
字符串转字符数组:str.toCharArray()
字符数组转字符串:String.valueOf(char)
打印数组中的内容:Arrays.toString()

import java.util.Arrays;

public class StringTest {
    public static void main(String[] args) {
        String str1 = "smallpang";
        System.out.println("原字符串:" + str1);
        char[] sp = str1.toCharArray();
        System.out.println("字符数组:" + Arrays.toString( str1.toCharArray()));
        Arrays.sort(sp);
        String newStr = String.valueOf(sp);
        System.out.println("转换后字符串:" + newStr);

    }
}

你可能感兴趣的:(String常用方法的算法题目)