反转字符串,并去除前后多余空格

" hello world I am judy! " 反转为: "judy! am I world hello"

步骤1:去除前后空格,中间多余空格去除

步骤2:反转所有字符串

步骤2:按单词反转

public class StringTest {

    public static void main(String[] args) {
        char[] strArray = {' ',' ','h', 'e', 'l', 'l', 'o', ' ', ' ', 'w', 'o', 'r', 'l', 'd', ' ', ' ', 'I', ' ', 'a', 'm', ' ', 'j', 'u', 'd', 'y', '!', ' ', ' '};
        strArray = reversStrings(strArray);
        System.out.println(strArray);

    }

    private static char[] reMoveWordSpace(char[] strArray) {
        int fast = 0;
        int slow = 0;
        //去掉字符串前面的空格
        while (strArray.length > 0 && fast < strArray.length && strArray[fast] == ' ') {
            fast++;
        }
        for (; fast < strArray.length; fast++) {
            //去掉字符串中间冗余空格,fast不能删掉最后一个空格,所以需要最后判断['a','','']
            if (fast - 1 > 0 && strArray[fast - 1] == strArray[fast] && strArray[fast] == ' ') {
                continue;
            } else {
                strArray[slow++] = strArray[fast];
            }
        }
        //去掉字符串末尾空格,因为fast不能删掉最后一个空格,所以需要最后判断
        if (slow - 1 > 0 && strArray[slow - 1] == ' ') {
            strArray = resizeArr(strArray, slow - 1);
        } else {
            strArray = resizeArr(strArray, slow);
        }
        return strArray;
    }

    //按索引反转字符串
    private static void reverseSpecialString(char[] strArray, int start, int end) {
        final int iniStart = start;
        final int iniEnd = end;
        for (int i = start; i < iniStart+((iniEnd + 1 - iniStart) / 2); i++) {
            int ends = end--;
            char temp = strArray[i];
            strArray[i] = strArray[ends];
            strArray[ends] = temp;
        }
    }

    public static char[] reversStrings(char[] strArray) {
        //去除前后空格,中间多余空格去除
        strArray = reMoveWordSpace(strArray);
        //反转所有字符串
        reverseSpecialString(strArray, 0, strArray.length - 1);
        //单词反转
        int fastIndex = 0;
        int slowIndex = 0;
        for (int i = 0; i < strArray.length; i++) {
            //按空格区分单词,之后反转
            if (i > 0 && (strArray[i] == ' ' || fastIndex == strArray.length - 1)) {
                if (fastIndex != strArray.length - 1) {
                    //非结尾
                    reverseSpecialString(strArray, slowIndex, fastIndex-1);
                    //开始索引跳过空格
                    slowIndex = ++fastIndex;
                }else {
                    //结尾
                    reverseSpecialString(strArray, slowIndex, fastIndex);
                }
            } else {
                fastIndex++;
                continue;
            }

        }

        return strArray;
    }



    private static char[] resizeArr(char[] strArray, int size) {
        char[] ints = new char[size];
        for (int i = 0; i < size; i++) {
            ints[i] = strArray[i];
        }
        return ints;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值