как динамически выделить размер массива строк в java

привет я новичок в работе с java. У меня есть следующий код, где я хотел инициализировать строковый массив word[], динамически состоящий из размера общего числа. токенов во всех документах [] массив. как мне это сделать?

String []result = {"Shipment of Gold damaged in fire","Delivery of silver arrived in silver truck","shipment of Gold arrived in Truck"};
String []documents = new String[result.length];
    for (int  k =0; k<result.length; ++k){ 
        documents[k] = result[k].toLowerCase();
        System.out.println("document["+k+"] :" + documents[k]);
    }
    /*step 2: Tokenize all documents  and create vocabulary from it*/
    int i=0; 
    String [] word = new String [30]; // how to do dynamic allocation here
    int no_of_tokens=0;

    for(String document:documents){
        StringTokenizer st = new StringTokenizer(document," ");
        System.out.print("tokens in document"+ i +":"+ st.countTokens()+"\n");

        while(st.hasMoreTokens()) {
            word[no_of_tokens]=st.nextToken();
            System.out.print(word[no_of_tokens] + "\n");
            no_of_tokens++;
        }
        i++; 
    }

person user2696955    schedule 13.05.2014    source источник
comment
Список массивов? docs.oracle.com/javase/7/docs/ api/java/util/ArrayList.html и stackoverflow.com/questions/2697182/how-to-use-an-array-list   -  person nico_c    schedule 13.05.2014
comment
Java ArrayList растет автоматически. Вам не нужно беспокоиться об изменении его размера: docs.oracle.com /javase/tutorial/коллекции/интерфейсы/   -  person Edwin Torres    schedule 13.05.2014
comment
@NicolásCarlo: Это должно быть домашнее задание. Обычно они имеют ограничения на использование таких низкоуровневых классов и методов. Просто сравните объем кода с объемом выполняемой работы.   -  person Bhesh Gurung    schedule 13.05.2014
comment
В Javadoc для StringTokenizer говорится... StringTokenizer — это устаревший класс, который сохраняется по соображениям совместимости, хотя его использование в новом коде не рекомендуется. ... так что я думаю, вам следует избегать этого. И если вы студент, и ваш учитель проинструктировал вас использовать его, покажите ему / ей Javadoc. Вы должны использовать split для чего-то подобного, и это автоматически даст вам массив нужного размера.   -  person Dawood ibn Kareem    schedule 13.05.2014
comment
большое спасибо всем за помощь..   -  person user2696955    schedule 14.05.2014
comment
@DavidWallace: да, я студент, но не изучал Java как формальный предмет в классе. изучение этого с помощью обучающих видео и таких форумов. Не могли бы вы предложить какие-либо учебные пособия, из которых я могу полностью изучить Java.?   -  person user2696955    schedule 14.05.2014
comment
Я не нашел ничего лучше онлайн-учебников по Java на сайте Oracle. Вы также можете поискать автора Брюса Эккеля — возможно, вы сможете найти онлайн-копию одной из его замечательных книг.   -  person Dawood ibn Kareem    schedule 14.05.2014


Ответы (4)


Либо используйте List, например ArrayList, либо используйте String.split() вместо StringTokenizer, он вернет String[].

person Kayaman    schedule 13.05.2014
comment
Использование split() — единственный разумный ответ на этот вопрос. +1 за то, что он единственный, кто упомянул об этом до сих пор. - person Dawood ibn Kareem; 13.05.2014

Я бы использовал java.util.ArrayList. вместо статического массива. Вы не можете изменить размер статического массива, но вы можете создать новый статический массив большего размера, а затем скопировать исходное содержимое.

person user3633673    schedule 13.05.2014


Вы можете использовать ArrayList<String> или LinkedList<String>. Они различаются накладными расходами для adding элементов (LinkedList быстрый, ArrayList медленный) и getting элементов через get(i) (LinkedList медленный, ArrayList быстрый).

person Christian Fries    schedule 13.05.2014
comment
На самом деле ArrayList выигрывает даже при добавлении. Особенно, если вы правильно оцениваете размер при его создании (чтобы минимизировать изменение размеров). - person Kayaman; 13.05.2014