如何声明未知大小的字符串数组?

时间:2012-10-18 05:05:24

标签: java arrays string initialization

  

可能重复:
  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();
 }

4 个答案:

答案 0 :(得分:31)

使用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()会告诉你有多少单词。

答案 1 :(得分: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();

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

不可能,数组的长度是恒定的。最好使用java.util.ListArrayList,LinkedList实施{/ 1}}

如果你想坚持使用数组,那么你可以使用这样的函数来调整你的数组大小,但是在这里它将创建一个新大小的新数组并复制先前的数组值。

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; 
}