可能性のある複製:
サイズが不明な配列の宣言
私は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();
}
代わりに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()
は、単語数を示します。
以下の例を参照してください。サイズが不明な文字列配列を宣言する方法についてのアイデアが得られます。
まず、ArrayListを使用して文字列を保存し、.addメソッドを呼び出すたびにArrayListのサイズが1要素ずつ増加します。 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();
これがお役に立てば幸いです。これは1つの方法にすぎませんが、同じことを行うための別のより効率的な方法があるかもしれません。
必要に応じて縮小および拡大できるdynamic構造を使用します。たとえば、ArrayList
が適しています。
配列の長さは一定ではありません。 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;
}