字符串首尾去除空格—字符串反转—查询指定字符串出现次数

本文展示了如何使用Java进行字符串处理,包括首尾空格去除、字符串反转、子串计数以及查找两个字符串的最大相同子串。这些方法在编程中经常用到,对于理解和操作字符串非常有帮助。
class StringTool {
    public static void main(String[] args) {
        String str = "   as dxvx  c   ";
        str = myTrim(str);  //首尾去除空格
        System.out.println("首尾去除空格:" + str);

        String str2 = "新中国好";
        str2 = invert(str2);
        System.out.println("字符串反转:" + str2);

        str = "abcjavaabcjavaphpjava";
        System.out.println("'java'出现的次数:" + getCount(str, "java")); //查询"java"出现的次数

        String str1 = "qwerabcdtyuiop";
        str2 = "xcabcdvbn";
        System.out.println("获取两个字符串中最大相同的子串:" + getMaxSubstring(str1, str2));//abcd
    }

    //获取两个字符串中最大相同的子串
    private static String getMaxSubstring(String str1, String str2) {
        String max = (str1.length() > str2.length()) ? str1 : str2;
        String min = max.equals(str1) ? str2 : str1;
        for (int i = 0; i < min.length(); i++) {
            for (int j = 0, z = min.length()-i; z <= min.length(); j++, z++) {//z能取到length,因为substring是[ )区间
                String sub = min.substring(j, z);//j和z一前一后同时++,由长到短截取
//				System.out.println(sub);
                if(max.contains(sub))//判断max中是否有sub
                    return sub;
            }
        }
        return null;
        /*思路:
         * 1,既然取得是最大子串,先看短的那个字符串是否在长的那个字符串中。
         * 如果存在,短的那个字符串就是最大子串。
         * 2,如果不是呢,那么就将短的那个子串进行长度递减的方式去子串,去长串中判断是否存在。
         * 如果存在就已找到,就不用在找了。*/
    }

    //首尾去除空格
    private static String myTrim(String str) {
        char[] ch = str.toCharArray();
        int startIndex = 0;
        int endIndex = ch.length - 1;
        for (int i = 0; i < ch.length; i++) {
            if (ch[i] == ' ')
                startIndex++;   //确定开始索引值
            else {
                break;
            }
        }
        for (int i = ch.length - 1; i >= 0; i--) {
            if (ch[i] == ' ')
                endIndex--;     //确定结束索引值
            else {
                break;
            }
        }
        return str.substring(startIndex, endIndex + 1);
        //return new String(ch, startIndex, endIndex - startIndex + 1);
    }

    //字符串反转
    private static String invert(String str2) {
        char[] ch = str2.toCharArray();
        for (int i = 0; i < ch.length / 2; i++) {
            char t = ch[i];
            ch[i] = ch[ch.length - i - 1];
            ch[ch.length - i - 1] = t;
        }
        return String.valueOf(ch);  //将字符数组转换为字符串
    }

    //查询指定字符串出现的次数
    private static int getCount(String str, String target) {
        int count = 0;
        int fromIndex = 0; // 记录从哪个索引值开始寻找目标子串
        while ((fromIndex = str.indexOf(target, fromIndex)) != -1) {  //当找到该子串时
            count++;
            fromIndex = fromIndex + target.length();  //跳过已找到的"java",继续查找
        }
        return count;
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值