Напишите метод замены всех пробелов в строке на '%20'

У меня есть вопрос о проблеме программирования из книги Гейл Лаакманн Макдауэлл Cracking The Code Interview, 5-е издание.

Условие проблемы: Напишите метод для замены всех пробелов в строке на '%20'. Предположим, что в конце строки достаточно места для размещения дополнительных символов, и что вам дана истинная длина строки. Я использовал код книги, реализовав решение на Java с использованием массива символов (учитывая тот факт, что строки Java неизменяемы):

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(): %20do, который вырезает последний символ исходного массива. Я ломал голову над этим, может ли кто-нибудь объяснить мне, почему алгоритм это делает?

13
задан ROMANIA_engineer 19 September 2015 в 17:52
поделиться