替换字符串中的空格

SPPan 2019-03-22 Java基础 76人已围观

问题描述

将一个字符串中的空格替换成 "%20"。例如A B CD替换结果为A%20B%20CD。

解决思路

在字符串尾部填充任意字符,使得字符串的长度等于替换之后的长度。

因为一个空格要替换成三个字符(%20),因此当遍历到一个空格时,需要在尾部填充两个任意字符。

令 p1 指向字符串原来的末尾位置,p2 指向字符串现在的末尾位置。p1 和 p2 从后向前遍历,当 p1 遍历到一个空格时,就需要令 p2 指向的位置依次填充 02%(注意是逆序的),否则就填充上 p1 指向字符的值。

从后向前遍是为了在改变 p2 所指向的内容时,不会影响到p1 遍历原来字符串的内容。

具体实现

public String replaceSpace(StringBuffer str) {
        int p1 = str.length() - 1;
        for (int i = 0; i <= p1; i++)
            if (str.charAt(i) == ' ')
                str.append("  ");

        int p2 = str.length() - 1;
        while (p1 >= 0 && p2 > p1) {
            char c = str.charAt(p1--);
            if (c == ' ') {
                str.setCharAt(p2--, '0');
                str.setCharAt(p2--, '2');
                str.setCharAt(p2--, '%');
            } else {
                str.setCharAt(p2--, c);
            }
        }
        return str.toString();
    }

扩展实现

将字符串指定字符替换成任意指定字符串。

public static String replace(String original, char src, String dest) {
        // 计算临时空间长度(在原始字符串长度的基础上,每遇到一个需要替换的,则加上目标串dest的长度减1)
        int tmpLength = original.length();
        for (int i = 0; i < original.length(); i++) {
            if (src == original.charAt(i)) {
                tmpLength += dest.length() - 1;
            }
        }
        char[] tmp = new char[tmpLength];
        // 指向原始字符串的最后一位
        int p1 = original.length() - 1;
        // 指向临时空间的最后一位
        int p2 = tmp.length - 1;
        while (p1 >= 0 && p2 >= p1) {
            // 取原始字符当前位置的字符
            char currentChar = original.charAt(p1--);
            // 如果是需要替换的字符
            if (src == currentChar) {
                // 把dest反转依次赋值到临时空间
                for (int i = dest.length() - 1; i >= 0; i--) {
                    tmp[p2--] = dest.charAt(i);
                }
            } else {
                // 如果不是需要替换的字符,则复制到临时空间
                tmp[p2--] = currentChar;
            }
        }
        return String.valueOf(tmp);
    }

吐槽(0)

文章评论

    共有0条评论

文章目录