Write a method to replace all spaces in a string with '%20'
arrays, char, java
Solution
You are passing the length as 6, which is causing this. Pass length as 7 including space. Other wise
for(i = length - 1; i >= 0; i--) {
will not consider last char.
Problem
I have a question about a programming problem from the book Cracking The Code Interview by Gayl Laakmann McDowell, 5th Edition. The problem states: Write a method to replace all spaces in a string with '%20'. Assume string has sufficient space at end of string to hold additional characters, and that you're given a true length of a string. I used the books code, implementing the solution in Java using a character array (given the fact that Java Strings are immutable): ``` 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); } } ``` The output I am getting from the `replaceSpaces()` call is: the%20do which is cutting of the last character of the original array. I have been scratching my head over this, can anyone explain to me why the algorithm is doing this?