From 94556bcd97b43af2080a2a7eab0c9dd8a11e08a7 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Fri, 10 Jan 2025 22:22:42 -0600 Subject: [PATCH] add StringBuilder ; improve Object.toString --- classes/java/lang/Object.java | 3 +- classes/java/lang/StringBuilder.java | 48 ++++++++++++++++++++++++++++ classes/test/TestClass.java | 11 ++++++- 3 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 classes/java/lang/StringBuilder.java diff --git a/classes/java/lang/Object.java b/classes/java/lang/Object.java index a9e856e..171178e 100644 --- a/classes/java/lang/Object.java +++ b/classes/java/lang/Object.java @@ -8,7 +8,6 @@ public class Object { public native int hashCode(); public String toString() { - return null; - //return getClass().getName() + "@" + Integer.toString(hashCode()); + return getClass().getName() + "@" + Integer.toString(hashCode()); } } diff --git a/classes/java/lang/StringBuilder.java b/classes/java/lang/StringBuilder.java new file mode 100644 index 0000000..238f108 --- /dev/null +++ b/classes/java/lang/StringBuilder.java @@ -0,0 +1,48 @@ +package java.lang; + +public class StringBuilder { + String[] strings; + int count; + + public StringBuilder() { + strings = new String[0]; + } + + public StringBuilder(int capacity) { + strings = new String[capacity]; + } + + private void ensureCapacityInternal(int minimumCapacity) { + if (strings.length < minimumCapacity) { + String[] new_strings = new String[minimumCapacity + 3]; + for (int i = 0; i < count; i++) { + new_strings[i] = strings[i]; + } + strings = new_strings; + } + } + + public StringBuilder append(String s) { + ensureCapacityInternal(count + 1); + strings[count] = s; + count += 1; + return this; + } + + public String toString() { + int size = 0; + for (int i = 0; i < count; i++) { + size += strings[i].length(); + } + byte[] buf = new byte[size]; + int ix = 0; + for (int i = 0; i < count; i++) { + byte[] src = strings[i].getBytes(); + for (int j = 0; j < src.length; j++) { + buf[ix] = src[j]; + ix += 1; + } + } + return new String(buf); + } +} diff --git a/classes/test/TestClass.java b/classes/test/TestClass.java index a193f1a..8f35afe 100644 --- a/classes/test/TestClass.java +++ b/classes/test/TestClass.java @@ -1,8 +1,17 @@ package test; class TestClass { - public static void main() { + static void test1() { TestClass obj = new TestClass(); System.out.println(obj.getClass().getName()); } + + static void test2() { + TestClass obj = new TestClass(); + System.out.println(obj); + } + + public static void main() { + test2(); + } }