我正在使用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 :(得分:31)
使用ArrayList
代替
List<String> list = new ArrayList<String>();
它会自动增长。
要检查重复项,您可以使用Set
(HashSet
),它不允许重复元素。
<强>更新强>
我在你的代码中看到了一些问题:
List<String> sentence = ArrayList<String>;
new
之后您遗漏了=
。
sentence += word;
仅当sentence
为String
时才有效。它是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.List
等ArrayList,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;
}