CS 1723 -- Using the String Method
substring to write a setCharAt method


// StringTest: test inserting a char in a String
//  Uses the String method substring.
//    s.substring(i) goes from index i to the end.
//    s.substring(i, j) goes from index i up to but not including index j
public class StringTest { 

   public static void main(String[] args) {
      String s = "abcdef";
      for (int i = -1; i < 8; i++)
         System.out.println("setCharAt(\"" + s + "\","  +
            i + "," + "'X'" + "): \"" + setCharAt(s, i, 'X') + "\"");
      s = "a";
      for (int i = -1; i < 2; i++)
         System.out.println("setCharAt(\"" + s + "\","  +
            i + "," + "'X'" + "): \"" + setCharAt(s, i, 'X') + "\"");
      s = "";
      for (int i = -1; i < 2; i++)
         System.out.println("setCharAt(\"" + s + "\","  +
            i + "," + "'X'" + "): \"" + setCharAt(s, i, 'X') + "\"");
   }

   public static String setCharAt(String str, int i, char ch) {
      if (i+1 > str.length() || str.length() == 0 || i < 0) return null;
      if (i == 0 && str.length() == 1) return ch + "";
      if (i == 0) return ch + str.substring(1);
      if (i+1 == str.length()) return str.substring(0, i) + ch;
      return str.substring(0, i) + ch + str.substring(i+1);
   }
}
Sample run.
% java StringTest
setCharAt("abcdef",-1,'X'): "null"
setCharAt("abcdef",0,'X'): "Xbcdef"
setCharAt("abcdef",1,'X'): "aXcdef"
setCharAt("abcdef",2,'X'): "abXdef"
setCharAt("abcdef",3,'X'): "abcXef"
setCharAt("abcdef",4,'X'): "abcdXf"
setCharAt("abcdef",5,'X'): "abcdeX"
setCharAt("abcdef",6,'X'): "null"
setCharAt("abcdef",7,'X'): "null"
setCharAt("a",-1,'X'): "null"
setCharAt("a",0,'X'): "X"
setCharAt("a",1,'X'): "null"
setCharAt("",-1,'X'): "null"
setCharAt("",0,'X'): "null"
setCharAt("",1,'X'): "null"

Revision date: 2001-09-09. (Please use ISO 8601, the International Standard.)