2012-10-18 65 views
14

可能重复:
Declaring an array of unknown size如何声明未知大小的字符串数组?

我在Java中工作,我想输入一个句子到字符串数组。我将其标记并确定字数。但是,我需要将每个单词添加到字符串数组中以确定是否有重复。我不确定如果在程序后期才知道字数,我不知道如何初始化我的数组。

//Declares variables 
    Scanner scan = new Scanner (System.in); 
    int withoutdup = 0, wordCount = 0; 
    String line, word; 
    StringTokenizer tokenizer; 
    List<String> sentence = ArrayList<String>; 

    //Asks user for input 
    System.out.println ("Please enter text. Enter DONE to finish."); 
    line = scan.next(); 


    //Tokenizes the string and counts the number of character and words 
while (!line.equals("DONE")) 
{ 
    tokenizer = new StringTokenizer (line); 
    while (tokenizer.hasMoreTokens()) 
    { 
     word = tokenizer.nextToken(); 
     wordCount++; 
     sentence += word; 
    } 
    line = scan.next(); 
} 
+0

然后你应该使用一个ArrayList来代替,并在最后你仍然可以转换为一个数组... – Naytzyrhc

回答

27

使用ArrayList代替

List<String> list = new ArrayList<String>(); 

它会自动增长。

要检查重复项,您可以使用SetHashSet),它不允许重复的元素。

更新

我看到你的代码中的几个问题:

List<String> sentence = ArrayList<String>; 

=后失踪的new

sentence += word; 

这只会工作,如果sentenceString。这是一个List所以你应该使用List.add方法有

sentence.add(word); 

而且现在wordCount++;是多余的sentence.size()会告诉你多少字。

+0

对不起,我很新,但这是我有输入句子: 系统。 out.println(“请输入文字,输入DONE完成。”); line = scan.next(); while(!line.equals(“DONE”)) { tokenizer = new StringTokenizer(line); (tokenizer.hasMoreTokens()) { word = tokenizer.nextToken(); wordCount ++; } line = scan.next(); } 我该如何声明数组列表,因为列表 sentence = ArrayList ();不管用? – user1755178

+0

@ user1755178:你能用代码更新自己的问题吗? –

+0

是的,我刚刚做了 – user1755178

2

使用动态结构可以收缩和根据需要增长,ArrayList将是一个不错的选择,例如。

2

不可能,数组长度不变。它能够更好地使用java.util.List实现像ArrayList,LinkedList等...

如果你想与数组坚持那么你可以使用这种功能来调整你的阵列,但在这里再次,将创建新的尺寸新的数组和复制以前的阵列值。

private static Object resizeArray (Object oldArray, int newSize) { 
    int oldSize = java.lang.reflect.Array.getLength(oldArray); 
    Class elementType = oldArray.getClass().getComponentType(); 
    Object newArray = java.lang.reflect.Array.newInstance(
     elementType, newSize); 
    int preserveLength = Math.min(oldSize, newSize); 
    if (preserveLength > 0) 
     System.arraycopy(oldArray, 0, newArray, 0, preserveLength); 
    return newArray; 
} 
6

只看下面的例子,你会明白如何声明一个未知大小的字符串数组。

首先,使用ArrayList来存储字符串,每次调用.add方法时,ArrayList大小增加一个元素。当你填充ArrayList时,使用ArrayList size()方法并创建你的String数组并根据其大小。但要确保ArrayList中的每个元素都是一个Object,这就是为什么您需要将每个元素转换为String的原因。

例子:

ArrayList list = new ArrayList(); 

for(int i = 0; i < 100; i++) 

list.add("stuff"); 

String[] strArray = new String[ list.size() ]; 

for(int j = 0; j < strArray.length; j++) 

strArray[ j ] = list.get(j).toString(); 

希望这会帮助你。这只是一种方式,但我认为可能会有另一种更有效的方式,通过你可以做同样的事情。