java – 编写一个方法来替换字符串中的所有空格

我有一个关于编程问题的问题,从第5版的Gayl Laakmann McDowell的“Cracking The Code Interview”开始.

问题是:写一个方法用”替换字符串中的所有空格.假设字符串在字符串末尾有足够的空间来保存其他字符,并且给出一个字符串的真正长度.我使用了图书代码,使用一个字符数组来实现Java中的解决方案(给出了Java Strings是不可变的):

public class Test {
    public void replaceSpaces(char[] str,int length) {
        int spaceCount = 0,newLength = 0,i = 0;

        for(i = 0; i < length; i++) {
            if (str[i] == ' ') 
                spaceCount++;
        }

        newLength = length + (spaceCount * 2);
        str[newLength] = '\0';
        for(i = length - 1; i >= 0; i--) {
            if (str[i] == ' ') {
                str[newLength - 1] = '0';
                str[newLength - 2] = '2';
                str[newLength - 3] = '%';
                newLength = newLength - 3;
            }
            else {
                str[newLength - 1] = str[i];
                newLength = newLength - 1;
            }
        }
        System.out.println(str);
    }

    public static void main(String[] args) {
        Test tst = new test();
        char[] ch = {'t','h','e',' ','d','o','g',' '};
        int length = 6;
        tst.replaceSpaces(ch,length);  
    }
}

我从replaceSpaces()调用得到的输出是:正在切割原始数组的最后一个字符.我一直在抓我的头,任何人都可以向我解释为什么算法是这样做的?

解决方法

你的长度是6,导致这个.通行长度为7,包括空格.
除此以外
for(i = length - 1; i >= 0; i--) {

不会考虑最后一个字符.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...