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

这是一个关于字符串处理的Java代码示例,包括去除前后及中间空格,整体反转和按单词反转。主要涉及字符串反转算法和数组操作。

" 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;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值