18

重複の可能性:
サイズが不明な配列を宣言する

私は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();
 }
4

4 に答える 4

32

ArrayList代わりに使用してください

List<String> list = new ArrayList<String>();

自動的に成長します。

重複をチェックするには、SetHashSet)を使用できます。重複する要素は許可されません。

アップデート

コードにいくつか問題があります。

List<String> sentence = ArrayList<String>;

new後がありません=

sentence += word;

sentenceだった場合にのみ機能しStringます。ですので、そこでメソッドListを使用する必要がありますList.add

sentence.add(word);

また、wordCount++;冗長sentence.size()になり、単語数がわかります。

于 2012-10-18T05:06:50.927 に答える
6

以下の例を見るだけで、未知のサイズの文字列配列を宣言する方法がわかります。

まず、ArrayList を使用して文字列を格納し、.add メソッドを呼び出すたびに、ArrayList のサイズが 1 要素ずつ増加します。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();

これがあなたを助けることを願っています。これは 1 つの方法にすぎませんが、同じことを行うことができる別のより効率的な方法があると思います。

于 2012-10-18T05:37:55.590 に答える
2

たとえば、必要に応じて縮小および拡大できる動的構造を使用することをArrayListお勧めします。

于 2012-10-18T05:07:04.230 に答える
2

不可能です。配列の長さは一定です。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; 
}
于 2012-10-18T05:07:16.183 に答える