【Java自用】String类练习题

本文介绍了一系列字符串操作技巧,包括去除字符串两端空格、字符串指定部分反转、查找子串出现次数、寻找最长公共子串及字符排序等实用算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常见算法题目的考查:

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

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

package com.atguigu.exer;

import org.junit.Test;

/**
 * 2.将一个字符串进行反转。将字符串中指定部分进行反转。
 * 比如将“ab cdef g”反转为”ab fedc g” 2-5
 *
 * @author WanZi
 * @create 2021-09-18 12:12
 */
public class StringDemo {
   

    //方式一:转换为char[] 字符数组 start:2,end:5
    public String reverse1(String str, int start, int end) {
   

        if (str != null && str.length() != 0) {
   
            //字符串--->char[]:toCharArray()
            char[] arr = str.toCharArray();

            //对数组进行反转
            for (int i = start, j = end; i < j; i++, j--) {
   
                char temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
            //返回String
            return new String(arr);
        }
        return null;
    }


    //方式二:使用String拼接操作 不变+变+不变 start:2,end:5
    public String reverse2(String str, int start, int end) {
   

        if (str != null && str.length() != 0) {
   

            //第一部分 从0开始到start[ 0,2 ) ab

            String reverseStr = str.substring(0, start);

            //第二部分  从后往前取  start:2,end:5
            for (int i = end; i >= start; i--) {
   
                reverseStr += str.charAt(i);//ab + f/e/d/c  charAt指定i位置上的元素
            }
            //第三部分 ab + f/e/d/c + g(end:5 + 1 = 6 = g) 拼接从end+1的位置到末尾
            reverseStr += str.substring(end + 1);
            return reverseStr;
        }
        return null;
    }


    //方式三:使用StringBuffer/StringBuilder 替换String 优化
    //使用StringBuffer/StringBuilder看是否涉及多线程问题,如果没有用Builder
    public String reverse3(String str, int start, int end){
   
        if(str != null && str.length() != 0){
   
            StringBuilder builder = new StringBuilder(str.length());

            //第一部分 将[0,2) --> ab 添加到builder里
            builder.append(str.substring(0,start));

            //第二部分 倒着取
            for (int i = end; i >= start; i--) {
   
                builder.append(str.charAt(i)); //charAt指定i位置上的元素append到现在的builder上
            }

            //第三部分 拼接 从end+1的位置到末尾
            builder.append(str.substring(end +1));

            //转换成String方式
            return builder.toString();
        }
        return null;
    }


    @Test
    public void testReverse() {
   

        String str = "abcdefg";

        //调用reverse方法
        String reverse = reverse3(str, 2, 5);
        System.out.println(reverse);


    }

}

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

public class StringDemo1 {
   
    /**
     * 获取subStr在mainStr中出现的次数
     * @param mainStr
     * @param subStr
     * @return
     */

    public int getCount(</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值