Several common interview questions about the String class

1. Reverse a string. Reverse the specified part of the string. For example, "abcdefg" is reversed to "abfedcg"

public class String_Change {
    
    
  //方式一: 转为 char[]
    public String reverse1(String str,int startIndex,int endIndex){
    
    
        if (str!=null){
    
    
            char[] chars=str.toCharArray();
            for(int x = startIndex,y = endIndex;x<y;x++,y--){
    
    
                char temp = chars[x];
                chars[x] = chars[y];
                chars[y] = temp;
            }
            return new String(chars);
        }else {
    
    
            return "";
        }
    }
    // 方式二:截取
    public String reverse2(String str ,int startIndex,int endIndex){
    
    
        if(str !=null){
    
    
            // 第一部分
            String reverseStr = str.substring(0,startIndex);
            // 第二部分
            for(int i = endIndex;i>=startIndex;i--){
    
    
                reverseStr +=str.charAt(i);
            }
            //第三部分
            reverseStr +=str.substring(endIndex+1);
            return reverseStr;
        }else {
    
    
            return "";
        }
    }

    // 方式三使用 StringBuffer / StringBuilder 替换String
    public String reverse3(String str,int startIndex,int endIndex){
    
    
        if(str !=null){
    
    
            StringBuilder builder = new StringBuilder(str.length());
            // 第一部分
            builder.append(str.substring(0,startIndex));
            //第二部分
            for(int i = endIndex;i>=startIndex;i--){
    
    
                builder.append(str.charAt(i));
            }
            //第三部分
            builder.append(str.substring(endIndex+1));

            return builder.toString();
        }
        return null;
    }

    public static void main(String[] args) {
    
    
        String_Change string_change = new String_Change();
        String str="abcdefg";
        System.out.println(string_change.reverse1(str, 2, 5));
        System.out.println(string_change.reverse2(str, 2, 5));
        System.out.println(string_change.reverse3(str, 2, 5));
    }
}

2. Get the largest identical substring in two strings. For example:
str1 = "abcwerthelloyuiodefabcdef"; str2 = "cvhellobnm"
Hint: compare the shorter string with the substring of decreasing length and the longer string.

public class String_getMaxSubString {
    
    
    //前提:两个字符串中只有一个最大相同子串
    public String getMaxSameString(String str1,String str2){
    
    
        if(str1 != null && str2 != null){
    
    
            String maxStr = (str1.length() >= str2.length())? str1 : str2;
            String minStr = (str1.length() < str2.length())? str1 : str2;
            int length = minStr.length();

            for(int i = 0;i < length;i++){
    
    //外层有多少大轮(小字符串的长度)
                for(int x = 0,y = length - i;y <= length;x++,y++){
    
    //内层循环相当于一个方框从左移动到右边(动态规划)
                    String subStr = minStr.substring(x,y);//substring切片要比较的字符串
                    if(maxStr.contains(subStr)){
    
    
                        return subStr;
                    }

                }
            }

        }
        return null;
    }

    // 如果存在多个长度相同的最大相同子串
    // 此时先返回String[],后面可以用集合中的ArrayList替换,较方便
    public String[] getMaxSameString1(String str1, String str2) {
    
    
        if (str1 != null && str2 != null) {
    
    
            StringBuffer sBuffer = new StringBuffer();
            String maxString = (str1.length() > str2.length()) ? str1 : str2;
            String minString = (str1.length() > str2.length()) ? str2 : str1;

            int len = minString.length();
            for (int i = 0; i < len; i++) {
    
    
                for (int x = 0, y = len - i; y <= len; x++, y++) {
    
    
                    String subString = minString.substring(x, y);
                    if (maxString.contains(subString)) {
    
    
                        sBuffer.append(subString + ",");
                    }
                }
//                System.out.println(sBuffer);
                if (sBuffer.length() != 0) {
    
    //如果找到了该长度的字串,则要中止最外层循环
                    break;
                }
            }
            String[] split = sBuffer.toString().replaceAll(",$", "").split("\\,");
            return split;
        }

        return null;
    }

    @Test
    public void testGetMaxSameString(){
    
    
        String str1 = "abcwerthello1yuiodefabcdef";
        String str2 = "cvhello1bnmabcdef";
        String[] maxSameStrings = getMaxSameString1(str1, str2);
        System.out.println(Arrays.toString(maxSameStrings));

    }

}

3. Sort the characters in the string in natural order.
Tips:
1) The string becomes an array of characters.
2) Sort the array, select, bubble, Arrays.sort();
3) Turn the sorted array into a string.

public class String_SortString {
    
    
    public String sortString(String str){
    
    
        if (str !=null){
    
    
            char[] chars=str.toCharArray();
            //Arrays.sort(chars);//Arrays.sort()
            //冒泡排序
            for (int i = 0; i < str.length(); i++) {
    
    
                for (int j = i+1; j < str.length(); j++) {
    
    
                    if (chars[i]>chars[j]){
    
    
                        char temp=chars[i];
                        chars[i]=chars[j];
                        chars[j]=temp;
                    }
                }
            }
            选择排序的优化
            //        for(int i = 0; i < chars.length - 1; i++) {// 做第i趟排序
            //            int k = i;
            //            for(int j = k + 1; j < chars.length; j++){// 选最小的记录
            //                if(chars[j] < chars[k]){
    
    
            //                    k = j; //记下目前找到的最小值所在的位置
            //                }
            //            }
            //            //在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换
            //            if(i != k){  //交换a[i]和a[k]
            //                char temp = chars[i];
            //                chars[i] = chars[k];
            //                chars[k] = temp;
            //            }
            //        }
            return new String(chars);
        }
        return null;
    }
    @Test
    public void test(){
    
    
        String_SortString sortString=new String_SortString();
        String str="bcgfeda";
        String str2=sortString.sortString(str);
        System.out.println(str2);
    }
}

4. Get the number of times a string occurs in another string. For example: Get the number of occurrences of "ab" in "abkkcadkabkebfkabkskab"

public class String_SubStringTimes {
    
    
    public int getCount(String mainStr,String subStr){
    
    
        int mainLength = mainStr.length();
        int subLength = subStr.length();
        int count = 0;
        int index = 0;
        if(mainLength >= subLength){
    
    //这两个字符串的地位不一样
            //方式一:
//            while((index = mainStr.indexOf(subStr)) != -1){
    
    
//                count++;
//                mainStr = mainStr.substring(index + subStr.length());
//            }
            //方式二:对方式一的改进
            while((index = mainStr.indexOf(subStr,index)) != -1){
    
    //index是开始找的位置
                count++;
                index += subLength;
            }

            return count;
        }else{
    
    
            return 0;
        }
    }

    @Test
    public void testGetCount(){
    
    
        String mainStr = "abkkcadkabkebfkaabkskab";
        String subStr = "ab";
        int count = getCount(mainStr, subStr);
        System.out.println(count);
    }
}

5. Simulate a trim method to remove spaces at both ends of the string.

public class String_Trim {
    
    
    public String simulationTrim(String str){
    
    
        if (str!=null){
    
    
            int start=0;
            int end=str.length()-1;
            while (start<end && str.charAt(start)==' '){
    
    
                start++;
            }
            while (start<end && str.charAt(end)==' '){
    
    
                end--;
            }
            return str.substring(start,end);
        }else {
    
    
            return "";
        }
    }

    public static void main(String[] args) {
    
    
        String_Trim string_trim=new String_Trim();
        String str="   abcdefg   ";
        System.out.println(string_trim.simulationTrim(str));
    }
}

Guess you like

Origin blog.csdn.net/m0_46450708/article/details/119616389