我有一个关于编程问题的问题,从第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()调用得到的输出是:正在切割原始数组的最后一个字符.我一直在抓我的头,任何人都可以向我解释为什么算法是这样做的?