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.)