2 public class StringBuffer {
8 // private static final int DEFAULTSIZE=16;
10 public StringBuffer(String str) {
11 value = new char[str.count + 16]; // 16 is DEFAULTSIZE
13 for (int i = 0; i < count; i++)
14 value[i] = str.value[i + str.offset];
17 public StringBuffer() {
18 value = new char[16]; // 16 is DEFAULTSIZE
22 public StringBuffer(int i) {
31 public int capacity() {
35 public char charAt(int x) {
39 public StringBuffer append(char c) {
40 String str = String.valueOf(c);
44 public StringBuffer append(String s) {
45 if ((s.count + count) > value.length) {
47 char newvalue[] = new char[s.count + count + 16]; // 16
50 for (int i = 0; i < count; i++)
51 newvalue[i] = value[i];
52 for (int i = 0; i < s.count; i++)
53 newvalue[i + count] = s.value[i + s.offset];
57 for (int i = 0; i < s.count; i++) {
58 value[i + count] = s.value[i + s.offset];
65 public void ensureCapacity(int i) {
69 if (i > value.length) {
70 char newvalue[] = new char[i];
71 for (int ii = 0; ii < count; ii++)
72 newvalue[ii] = value[ii];
77 public StringBuffer append(StringBuffer s) {
78 if ((s.count + count) > value.length) {
80 char newvalue[] = new char[s.count + count + 16]; // 16 is DEFAULTSIZE
81 for (int i = 0; i < count; i++)
82 newvalue[i] = value[i];
83 for (int i = 0; i < s.count; i++)
84 newvalue[i + count] = s.value[i];
88 for (int i = 0; i < s.count; i++) {
89 value[i + count] = s.value[i];
96 public int indexOf(String str) {
97 return indexOf(str, 0);
100 public synchronized int indexOf(String str, int fromIndex) {
101 String vstr = new String(value, 0, count);
102 return vstr.indexOf(str, fromIndex);
105 public String toString() {
106 return new String(this);
109 public synchronized StringBuffer replace(int start, int end, String str) {
112 System.printString("StringIndexOutOfBoundsException: " + start + "\n");
116 System.printString("StringIndexOutOfBoundsException: start > length()\n");
120 System.printString("StringIndexOutOfBoundsException: start > end\n");
127 int len = str.length();
128 int newCount = count + len - (end - start);
129 if (newCount > value.length)
130 expandCapacity(newCount);
132 System.arraycopy(value, end, value, start + len, count - end);
133 str.getChars(value, start);
138 void expandCapacity(int minimumCapacity) {
139 int newCapacity = (value.length + 1) * 2;
140 if (newCapacity < 0) {
141 newCapacity = 0x7fffffff /* Integer.MAX_VALUE */;
142 } else if (minimumCapacity > newCapacity) {
143 newCapacity = minimumCapacity;
145 char newValue[] = new char[newCapacity];
146 System.arraycopy(value, 0, newValue, 0, count);