3

したがって、改行で区切られたフレーズのコレクションがあり、これらのフレーズを配列に入力したいと思います。これは私がこれまでに持っているものです:

   Scanner s;
   s = new Scanner(new BufferedReader(new FileReader("Phrases.txt")));
   for(i = 0; i < array.length;i++)
   {
   s.nextLine() = array[i];
   }

改行で区切られたフレーズを配列に入力するだけの高速で簡単な方法はありますか?

4

6 に答える 6

4

割り当ては逆にする必要があります: -

array[i] = s.nextLine();

そして、ファイルから受け取った入力に基づいて配列を埋める必要があると思います。ここでは、事前に宣言された配列の長さに基づいて入力を受け取っています。つまり、 を使用しているためarray、サイズは固定されています。そのため、固定数のフレーズのみを入力できます。


より良い方法は、を使用することArrayListです。

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

これで、ファイルから取得したフレーズに基づいて、配列リストを作成できます。サイズを事前に定義する必要はありません。動的にサイズが大きくなります。

フレーズを追加するには、次のようにします。

phrases.add(s.nextLine());

whileまで読むループ付きEOF

while (s.hasNextLine()) {
    phrases.add(s.nextLine());
}
于 2012-11-14T17:25:07.050 に答える
1

代入操作を逆にします(のarray[i]ように設定する必要がありますs.nextLine()。その逆ではありません。また、行がなくなったときに終了するようにforループを変更することをお勧めします。

for(i = 0; i < array.length && s.hasNextLine() ;i++) {
     array[i] = s.nextLine()
}
于 2012-11-14T17:27:47.397 に答える
1

で時間を無駄にしないでくださいScannerBufferedReader大丈夫です。これを試して:

BufferedReader br = new BufferedReader(new FileReader("Phrases.txt")));
LinkedList<String> phrases = new LinkedList<String>();
while(br.ready()) {
    phrases.add(br.readLine());
}
String[] phraseArray = phrases.toArray(new String[0]);

ちなみに、ファイルが大きい場合は使用しないことが重要です。そうすれば、最後に1つの配列のみを作成できます。そうしないと、大量のアレイが作成され、メモリが無駄になります。LinkedListArrayList

于 2012-11-14T17:28:33.710 に答える
1

これは、 ApacheCommonsを備えた1つのライナーで実行できます。FileUtils.readLines()

FileUtils.readLines(myFile).toArray(new String[0]);
于 2012-11-14T17:30:15.860 に答える
1

フレーズがいくつあるかわからないので (私は推測します)、完了したらArrayList.toArray()ArrayList<String>を使用して配列にデータを入力し、それを配列に変換します。ただし、柔軟性を高めるために、Java コレクションとして保持することをお勧めします。

于 2012-11-14T17:25:09.970 に答える
0

それは間違っている。そうでなければならない

for(i = 0; i < array.length;i++)
   {
   array[i]=s.nextLine();
   }

array[i] = value; // the value would be assigned into the array at index i.

ただし、より良いオプションは、動的サイズの利点を提供する ArrayList などのクラスを実装する List を使用することです。

 List<String> list = new ArrayList<>();
 list.add(s.nextLine(());
于 2012-11-14T17:24:56.133 に答える