如何在java中动态分配字符串数组的大小

时间:2014-05-13 18:49:41

标签: java arrays dynamic-arrays stringtokenizer

你好我是初学者使用java。我有以下代码,我想初始化字符串数组word []动态组成的总数为no。所有文档[]数组中的标记。 我应该怎么做?

String []result = {"Shipment of Gold damaged in fire","Delivery of silver arrived in silver truck","shipment of Gold arrived in Truck"};
String []documents = new String[result.length];
    for (int  k =0; k<result.length; ++k){ 
        documents[k] = result[k].toLowerCase();
        System.out.println("document["+k+"] :" + documents[k]);
    }
    /*step 2: Tokenize all documents  and create vocabulary from it*/
    int i=0; 
    String [] word = new String [30]; // how to do dynamic allocation here
    int no_of_tokens=0;

    for(String document:documents){
        StringTokenizer st = new StringTokenizer(document," ");
        System.out.print("tokens in document"+ i +":"+ st.countTokens()+"\n");

        while(st.hasMoreTokens()) {
            word[no_of_tokens]=st.nextToken();
            System.out.print(word[no_of_tokens] + "\n");
            no_of_tokens++;
        }
        i++; 
    }

4 个答案:

答案 0 :(得分:2)

要么List使用ArrayList,要么使用String.split()代替StringTokenizer,它会返回String[]

答案 1 :(得分:1)

我会使用java.util.ArrayList而不是静态数组。您无法调整静态数组的大小,但您可以创建一个更大的新静态数组,然后复制初始内容。

答案 2 :(得分:0)

对于这种情况,您可以使用List接口的实现,例如ArrayList。它会在几乎填满时自动调整大小,因此您不必担心计算正确的初始大小。

你这样使用它:

....
/*step 2: Tokenize all documents  and create vocabulary from it*/
int i=0; 
List<String> word = new ArrayList<String>(); // how to do dynamic allocation here
int no_of_tokens=0;

....

while(st.hasMoreTokens()) {
    word.add(st.nextToken());
    System.out.print(word.get(no_of_tokens) + "\n");
    no_of_tokens++;
}

答案 3 :(得分:0)

您可以使用ArrayList<String>LinkedList<String>。两者的add元素的开销不同(LinkedList很快,ArrayList很慢)和get元素通过get(i)(LinkedList很慢,ArrayList很快)。