Java教程

【Java基础】String常见算法题目

本文主要是介绍【Java基础】String常见算法题目,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

来看看API(jdk 1.8)中String都有那些方法:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1.模拟一个trim()方法,去除字符串两端的空格。
在这里插入图片描述

//2.模拟trim()方法,去除字符串两端的空格
public static String trimTest(String str){
    int start = 0;
    int end = str.length()-1;
    while(start<=end && str.charAt(end)==' '){
        end--;
    }
    while(start<=end && str.charAt(start)==' '){
        start++;
    }
    return str.substring(start,end+1);
}

2.将一个字符串进行反转,将指定位置的字符串进行反转,如abcdefgh,反转后输出afedcbgh
在这里插入图片描述

public class StringTest {
    public static void main(String[] args) {
        String s = reverse1("abcdefgh",1,5);
        System.out.println(s);
        String s1 = reverse2("abcdefgh",1,5);
        System.out.println(s1);
        String s2 = reverse3("abcdefgh",1,5);
        System.out.println(s2);
    }
    //方法1:利用String类的toCharArray()转换为字符数组,交换数组元素实现
    public static String reverse1(String str, int start, int end)  {
        if(str!=null){
            char[] chars = str.toCharArray();
            for (int i = start,j=end; i < j ; i++,j--) {
                char temp = chars[i];
                chars[i] = chars[j];
                chars[j] = temp;
            }
            return new String(chars);
        }
        return null;
    }
    //方法2:利用String类的+(拼接),charAt(index)实现
    public static String reverse2(String str, int start, int end){
        if(str!=null){
            String s1 = str.substring(0, start);
            for(int i=end;i>=start;i--){
                s1+=str.charAt(i);
            }
            s1 += str.substring(end+1);
            return s1;
        }
        return null;
    }
    //方法3:利用StringBuffer或StringBuilder确定长度,调用追加append(String str)实现
    public static String reverse3(String str, int start, int end){
        if(str!=null){
            StringBuffer stringBuffer = new StringBuffer(str.length()); //初始化StringBuffer底层char[]数组的长度
            stringBuffer = stringBuffer.append(str.substring(0,start)); //append():在原有的基础上追加
            //for循环中间需要反序的部分
            for(int i=end;i>=start;i--){
                stringBuffer = stringBuffer.append(str.charAt(i));
            }
            stringBuffer = stringBuffer.append(str.substring(end+1));
            return new String(stringBuffer);
        }
        return null;
    }
}

在这里插入图片描述
3.获取一个字符串在另一个字符串中出现的次数。
比如"ab"在“abkkcadkabkebfkabkskab”中出现的次数。
在这里插入图片描述

public class StringTest01 {
    public static void main(String[] args) {
        int count = getCount("ab", "abkkcadkabkebfkabkskab");
        System.out.println(count);
        int count1 = getCount1("ab", "abkkcadkabkebfkabkskab");
        System.out.println(count1);
    }
    //方法1:获取一个字符串在另一个字符串中出现的次数。
    public static int getCount(String subStr, String mainStr){
        int subLength = subStr.length();
        int mainLength = mainStr.length();
        int count = 0;
        int index = 0;
        if(subLength<=mainLength){
            while((index=mainStr.indexOf(subStr))!=-1){     //若index为1表示没有找到,退出循环
                count++;
                mainStr = mainStr.substring(index+subLength);
            }
            return count;
        }
        return 0;
    }
    //方法2:获取一个字符串在另一个字符串中出现的次数。
    public static int getCount1(String subStr, String mainStr){
        int subLength = subStr.length();
        int mainLength = mainStr.length();
        int count = 0;
        int index = 0;
        if(subLength<=mainLength){
            while ((index=mainStr.indexOf(subStr,index))!=-1){
                count++;
                index +=subLength;
            }
            return count;
        }
        return 0;
    }
}

在这里插入图片描述

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

public class StringTest02 {
    public static void main(String[] args) {
        String maxsameString = getMaxsameString("abcwerthelloyuiodefabcdef", "cvhellobnm");
        System.out.println(maxsameString);
        String[] maxsameString1 = getMaxsameString1("abcwerthelloyuiodefabcdef", "cvthellobnmabcdef");
        System.out.println(Arrays.toString(maxsameString1));

    }
    //4.查找两个字符串最大的相同子串(假设此处没有相同长度的子串)
    public static 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++){  //将长度小的字串进行分割,在看是否包含在maxStr中
                    String subStr = minStr.substring(x,y);
                    if(maxStr.contains(subStr)){
                        return subStr;      //第一次找到时就是最长的字串
                    }
                }
            }
        }
        return null;
    }
    //扩展:4.查找两个字符串最大的相同子串(可以存在相同长度的子串)
    public static String[] getMaxsameString1(String str1, String str2) {
        if(str1!=null&&str2!=null){
            String minStr = (str1.length()<str2.length())?str1:str2;
            String maxStr = (str1.length()>str2.length())?str1:str2;
            int length = minStr.length();
            StringBuffer stringBuffer = new StringBuffer();
            for(int i=0;i<length;i++){
                for(int x=0,y=length-i;y<=length;x++,y++){
                    String subString = minStr.substring(x,y);
                    if(maxStr.contains(subString)){
                        stringBuffer.append(subString+",");
                    }
                }
                if(stringBuffer.length()!=0){
                    break;
                }
            }
            //正则表达式
            String[] splitString = stringBuffer.toString().replaceAll(",$","").split("\\,");
            return splitString;
        }
        return null;
    }
}

在这里插入图片描述
5.对字符串中字符进行自然顺序排序。
提示:
1)字符串变成字符数组。
2)对数组排序,选择,冒泡,Arrays.sort();
3)将排序后的数组变成字符串。

public class StringTest03 {
    public static void main(String[] args) {
        String str = "acbfedgh";
        System.out.println(sortString(str));
        String str1 = "acbfedgh";
        System.out.println(sortString1(str1));
        String str2 = "acbfedgh";
        System.out.println(sortString1(str2));
    }
    //1.使用冒泡排序法
    public static String sortString(String str){
        char[] chars =  str.toCharArray();
        for(int i=0;i<chars.length;i++){
            for(int j=0;j<chars.length-i-1;j++){
                if(chars[j]>chars[j+1]){
                    char temp = chars[j];
                    chars[j] = chars[j+1];
                    chars[j+1] = temp;
                }
            }
        }
        return new String(chars);
    }
    //2.使用选择排序算法
    public static String sortString1(String str){
        char[] chars =  str.toCharArray();
        for(int i=0;i<chars.length-1;i++){
           int index = i;
           for(int j=i+1;j<chars.length;j++){
               if(chars[j]<chars[index]) {
                   index = j;
               }
           }
            char temp = chars[i];
            chars[i] = chars[index];
            chars[index] = temp;
        }
        return new String(chars);
    }
    //3.使用Arrays工具类进行排序
    public static String sortString2(String str){
        char[] chars = str.toCharArray();
        Arrays.sort(chars); //注意Arrays.sort()没有返回值
        String s = new String(chars);
        return s;
    }
}

在这里插入图片描述

这篇关于【Java基础】String常见算法题目的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!