Как объявить массив строк неизвестного размера?
Возможный дубликат:
Объявление массива неизвестного размера
Я работаю на 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();
}
Ответы
Ответ 1
Используйте ArrayList
вместо
List<String> list = new ArrayList<String>();
он растет автоматически.
Чтобы проверить дубликаты, вы можете использовать Set
(HashSet
), он не позволяет дублировать элементы.
Обновление
Я вижу пару проблем в вашем коде:
List<String> sentence = ArrayList<String>;
Вам не хватает new
после =
.
sentence += word;
Это будет работать, если sentence
был String
. Это a List
, поэтому вы должны использовать метод List.add
там
sentence.add(word);
Также теперь wordCount++;
является избыточным sentence.size()
расскажет вам, сколько слов.
Ответ 2
просто просмотрите приведенный ниже пример, вы получите представление о том, как объявить массив строк неизвестного размера.
Сначала используйте ArrayList для хранения строк и каждый раз вызывая метод .add, размер ArrayList увеличивается на один элемент. Когда вы заполняете ArrayList, используйте метод ArrayList size() и создайте массив String и размер его. Но убедитесь, что каждый элемент в ArrayList является объектом, поэтому вам нужно преобразовать каждый элемент в строку.
Пример:
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();
Надеюсь, это поможет вам. Его единственный способ, но я думаю, что может быть еще один более эффективный способ, через который вы можете сделать то же самое.
Ответ 3
Используйте динамическую структуру, которая может сжиматься и расти по мере необходимости, ArrayList
будет хорошим выбором, например.
Ответ 4
Невозможно, массивы постоянны по длине. Лучше использовать реализацию 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;
}