package homework5;
import java.io.*;
import java.util.Arrays;
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
MyStringBuffer strTest = new MyStringBuffer();
// FIX ME if you see the following string is not on the same line
System.out.println("stringTest is initilized - capacity=" + strTest.capacity() + " length=" + strTest.length());
BufferedReader stdin = new BufferedReader(
new InputStreamReader( System.in ) );
System.out.print("Enter a string:");
String myString = stdin.readLine();
strTest.append(myString); //TOTEST: test your append (String str)
printStrTest(strTest);
while (true) {
// FIX ME if you see the following string is not on the same line
System.out.println("Enter 1 of 4 options: ac (append a char), as (append a string), i (insert), d (delete), r (reverse), q (quit)");
String opt = stdin.readLine();
if (opt.equals("ac")) {
System.out.print("Append a char:");
char c = stdin.readLine().charAt(0);
strTest.append(c); //TOTEST: test your append (char a) function
printStrTest(strTest);
} else if (opt.equals("as")) {
System.out.print("Append a string:");
String aStr = stdin.readLine();
strTest.append(aStr); //TOTEST: test append with expandation
printStrTest(strTest);
} else if (opt.equals("i")) {
System.out.print("Insert a char:");
char c = stdin.readLine().charAt(0);
System.out.print("Location:");
int loc = Integer.parseInt(stdin.readLine());
strTest.insert(loc, c); //TOTEST: test your insert
printStrTest(strTest);
} else if (opt.equals("d")) {
System.out.print("Delete at location:"); // TOTEST delete
int loc = Integer.parseInt(stdin.readLine());
strTest.deleteCharAt(loc);
printStrTest(strTest);
} else if (opt.equals("r")) {
strTest.reverse(); //TOTEST reverse
printStrTest(strTest);
} else if (opt.equals("q")) {
System.out.println("Goodbye!!!");
break;
} else {
System.out.println("Error option entered:" + opt);
}
}
}
static void printStrTest(MyStringBuffer strTest){
// FIX ME if you see the following string is not on the same line
System.out.println("New string:" + strTest.toString()+ ",cap=" + strTest.capacity() + " len=" + strTest.length());
}
}
class MyStringBuffer {
//TODO explain: why you would need these data members.
private char[] chars; //character storage.
private int length; //number of characters used. efficient
public MyStringBuffer(){
chars = new char[16]; //Default storage is 16
length = 0; // No char
}
public int capacity(){
return chars.length;
}
//Expanse the capcity of the chars storage
void expandCapacity(int minimumCapacity) {
int newCapacity = (chars.length + 1) * 2;
if (newCapacity < 0) {
newCapacity = Integer.MAX_VALUE;
} else if (minimumCapacity > newCapacity) {
newCapacity = minimumCapacity;
}
chars = Arrays.copyOf(chars, newCapacity);
}
public int length(){
return length;
}
public String toString(){
//TODO
//Hint: just construct a new String from the ‘chars’ data member
//and return this new String – See API online for how create
//new String from char[]
String result = new String(chars, 0, length);
return result;
}
public MyStringBuffer append (char c){
//TODO
//You will need to call the expandCapacity if necessary
return this;
}
public MyStringBuffer append (String str){
//TODO
//You will need to call the expandCapacity if necessary
return this;
}
public MyStringBuffer insert (int offset, char c){
//TODO
//You will need to call the expandCapacity if necessary
return this;
}
public MyStringBuffer deleteCharAt(int index) {
//TODO
return this;
}
public MyStringBuffer reverse (){
//TODO
return this;
}
}
嗨,我读了这个http://www.roseindia.net/java/beginners/StringBuffer.shtml,我理解如何在这些情况下附加内容,但我不知道如何在这个中应用它。我想提到什么?我想我应该这样做:strbuf.append(“你好”);但是我应该用什么代替strbuf呢?我尝试了一些差异引用,但他们一直在说变量未找到。有人能告诉我吗?我很确定我可以做其余的事情。或者至少我希望我能。我认为这是myString但是没有用。
谢谢:)
答案 0 :(得分:0)
在此作业中,目标不是使用StringBuffer
,而是根据char[]
创建自己的作品。
例如,对于append(char c)
,您应该编写一个代码,该代码将在数组chars
的末尾添加给定的char并增加长度(因为您刚添加了一个char)。
这项任务是关于创建自己的StringBuffer实现,并了解它是如何工作的,而不是直接使用它。