Java StringBuffer问题:如何在这种情况下附加内容?

时间:2010-10-16 11:19:25

标签: java stringbuffer

 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但是没有用。

谢谢:)

1 个答案:

答案 0 :(得分:0)

在此作业中,目标不是使用StringBuffer,而是根据char[]创建自己的作品。

例如,对于append(char c),您应该编写一个代码,该代码将在数组chars的末尾添加给定的char并增加长度(因为您刚添加了一个char)。

这项任务是关于创建自己的StringBuffer实现,并了解它是如何工作的,而不是直接使用它。