0
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(“Hello”);但是我怎样才能代替strbuf呢?我尝试了几个不同的参考,但他们一直说变量没有找到。有人能告诉我吗?我很确定我可以做其余的事情。或者至少我希望我能。我认为这是myString,但没有奏效。Java StringBuffer问题:如何在这种情况下追加一些东西?
谢谢:)
@Colin Hebert对不起,但我误解了这一点? 您将实现MyStringBuffer类,它是StringBuffer类的简化版本(请参阅讲义:cis36L052)。该框架已经提供。你需要实现6个函数:append(char c),append(String str),insert(int offset,char c),deleteCharAt(int index),reverse()和toString()。错误,如果你不能建立该计划。 – CuriousStudent 2010-10-16 11:28:19
该框架为您提供。您需要将以下代码复制到您的新程序中。无论何时您看到// FIX ME或// TODO注释,您都需要修复代码或添加新代码。如果无法构建程序,则必须进行调试,修复错误。 – CuriousStudent 2010-10-16 11:29:42
@CuriousStudent,它表示你将**实现** StringBuffer的简化版本,而不是使用'StringBuffer'。 – 2010-10-16 11:30:17