你好我是初学者使用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++;
}
答案 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很快)。