title: Write a method to replace all spaces in a string with '%20'
body: <p>I have a question about a programming problem from the book Cracking The Code Interview by Gayl Laakmann McDowell, 5th Edition. </p>
  
  <p>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):</p>
  
  <pre><code>public class Test {
      public void replaceSpaces(char[] str, int length) {
          int spaceCount = 0, newLength = 0, i = 0;
  
          for(i = 0; i &lt; length; i++) {
              if (str[i] == ' ') 
                  spaceCount++;
          }
  
          newLength = length + (spaceCount * 2);
          str[newLength] = '\0';
          for(i = length - 1; i &gt;= 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);  
      }
  }
  </code></pre>
  
  <p>The output I am getting from the <code>replaceSpaces()</code> call is: <strong>the%20do</strong> 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?</p>