Как объявить массив строк неизвестного размера? - программирование
Подтвердить что ты не робот

Как объявить массив строк неизвестного размера?

Возможный дубликат:
Объявление массива неизвестного размера

Я работаю на 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();
 }
4b9b3361

Ответ 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; 
}