Java 把一个字符串中的单词原地进行反转。比如“abc de fgha”,反转成“cba ed ahgf”

方案一(部分情况下不适用)

使用split分割空格乎,然后通过StringBuffer进行反转。不适用的情况如,前后空格的,中间两个单词中有多个空格时,不能保证原地反转。

    public String reverse(String str) {
        Log.e(TAG, "输入:" + str);
        if (TextUtils.isEmpty(str)) {
            return "";
        }
        //空格分割字符串
        String[] split = str.split(" ");
        StringBuffer sbItem;
        StringBuilder sbReverse = new StringBuilder();
        Log.e(TAG, "split.length=" + split.length);
        //遍历
        for (String item : split) {
            //将每一个item反转
            sbItem = new StringBuffer(item);
            Log.e(TAG, "item=" + item);
            //拼接
            sbReverse.append(sbItem.reverse());
            sbReverse.append(" ");
        }
        return sbReverse.toString();
    }

方案二,使用栈来做。

    public String reverse2(String str) {
        Log.e(TAG, "输入:" + str);
        if (TextUtils.isEmpty(str)) {
            return "";
        }
        Stack stack = new Stack();
        StringBuilder sb = new StringBuilder();
        //通过栈来做
        for (int i = 0; i < str.length(); i++) {
            char charAt = str.charAt(i);
            Log.e(TAG, "charAt=" + charAt);
            if (charAt == ' ') {
                while (!stack.empty()) {
                    sb.append(stack.pop());
                }
                sb.append(charAt);
            } else {
                stack.push(charAt);
            }
        }
        while (!stack.empty()) {
            sb.append(stack.pop());
        }
        return sb.toString();
    }

你可能感兴趣的:(Java基础)