替换空格(Java)

题目描述:
 * 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

思路:

1、利用String的库函数

2、使用char数组

代码:

package com.my.test.datastructure.str;

/**
 * ReplaceSpace<br>
 * 
 * 题目描述:
 * 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
 * 
 */
public class ReplaceSpace
{

    /**
     * 使用string的库函数
     */
    public static String replaceSpaceByStr(StringBuffer str) {
        if (str == null) {
            return null;
        }
        return str.toString().replaceAll(" ", "%20");
    }
    
    /**
     * 使用char数组
     * 
     * 思路:
     * 1、扩容数组为新数组
     * 2、两个指针,一个指向原数组最后一位,一个指向新数组最后一位,开始替换元素
     */
    public static String replaceSpace(StringBuffer str) {
        if (str == null) {
            return null;
        }
        char[] arr = str.toString().toCharArray();
        return replaceSpace(arr);
    }
    
    /**
     * @param arr 字符串转换的字符数组
     * @return
     */
    public static String replaceSpace(char[] arr) {
        int len = arr.length;
        if (len <= 0) {
            return "";
        }
        
        // 统计几个空格,计算扩容后数组长度
        int spaceCount = 0;
        for (char c : arr) {
            if (c == ' ') {
                spaceCount++;
            }
        }
        
        // 数组扩容
        // 用位移运算符时,要注意运算符优先级,+ 优先于 <<,所以要加括号
        int newLength = len + (spaceCount << 1);
        char[] newArr = new char[newLength];
        System.arraycopy(arr, 0, newArr, 0, len);
        
        // 新数组中替换' ' => %20
        int curIndex = len - 1;
        int newIndex = newLength - 1;
        while (curIndex >= 0) {
            // ' '替换为%20
            if (newArr[curIndex] == ' ') {
                newArr[newIndex--] = '0';
                newArr[newIndex--] = '2';
                newArr[newIndex--] = '%';
                curIndex--;
            // 非空 则后移元素,计位器前移
            } else {
                newArr[newIndex--] = newArr[curIndex--];
            }
        }
        
        return new String(newArr);
    }
    
    public static void main(String[] args)
    {
        System.out.println(replaceSpaceByStr(new StringBuffer("We are happy")));
        System.out.println(replaceSpace(new StringBuffer("We are happy")));
    }

}

猜你喜欢

转载自blog.csdn.net/zangdaiyang1991/article/details/88979760