0

ファイルから読み取ったテキストを配列リストに入れるのに問題があります。

私のテキストは次のようになります。

438;MIA;JFK;10:55;1092;447
638;JFK;MIA;19:45;1092;447
689;ATL;DFW;12:50;732;448 etc...

私のコードは次のようになります:

package filesexample;
import java.io.*;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.ArrayList;
/**
*
* @author 
*/
public class FilesExample {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws IOException {

    File file = new File ("/Schedule.txt");

    try
    {
        Scanner scanner= new Scanner(file);;

        while (scanner.hasNextLine())
        {
            String line = scanner.nextLine();
            Scanner lineScanner= new Scanner(line);
            lineScanner.useDelimiter(";");
            while(lineScanner.hasNext()){
            String part = lineScanner.next();
            System.out.print(part + " ");
        }

          System.out.println();          




        }

    }catch (FileNotFoundException e){
            e.printStackTrace();
        }
    }
}

始めるためのいくつかの助けをいただければ幸いですありがとうございます!

4

4 に答える 4

0

それらはすべて、カテゴリごとに独自の配列を持っている必要があるため、フライト番号には独自の配列が必要であり、独自の配列を発信します

私は言わないでください。それらごとに個別の配列を用意する必要はありません。

私はむしろclass属性を持つを作成したいと思います:- flight number, origin, destination, time, miles and price

これで、すべての行について、それをで分割し;、配列をパラメーターとして受け取るクラス内のコンストラクターを作成します。そしてArrayList、これらのパラメーターごとに個別にするのではなくArrayList、そのクラスのインスタンスを作成します。

class Flight {
    private int flightNumber;
    private String origin;
    private String destination;
    ... so on for `time, miles and price`

    public Flight(String[] attr) {
        this.flightNumber = Integer.parseInt(attr[0]);
        this.origin = attr[1];
        this.destination = attr[2];
        ... so on.
    }
}

そして、あなたが使用している場所:-

Scanner lineScanner = new Scanner(line);
lineScanner.useDelimiter(";");

を使用String#split()して個々の属性を取得し、を作成してArrayList<Flight>、それにFlightインスタンスを追加します。-

List<Flight> flights = new ArrayList<Flight>();

while (scanner.hasNextLine()) {
     String line = scanner.nextLine();
     String[] attributes = line.split(";");
     flights.add(new Flight(attributes));
} 

ノート : -

Flightクラスをインスタンス化する方法、およびさまざまな属性を設定する方法を改善できます。あなたの属性は異なるタイプであり、それらはにString formあるので、あなたは適切なconversionfromString to IntegerまたはString to double私がここで考慮していないものを使用する必要があるでしょう。

于 2012-11-14T20:13:34.727 に答える
0

よりオブジェクト指向のアプローチの必要性を繰り返しますが、これがあなたが求めたものに必要なものです。

public final class FlightInfoParser {

  private static final String[] EMPTY_STRING_ARRAY = new String[]{};

  public static void main(String[] args) throws IOException {
    BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(file)));

    List<String> flightNumbersList = new ArrayList<String>();
    List<String> originsList = new ArrayList<String>();
    List<String> destinationsList = new ArrayList<String>();
    List<String> departureTimesList = new ArrayList<String>();
    List<Integer> milesList = new ArrayList<Integer>();
    List<Double> pricesList = new ArrayList<Double>();

    String line;
    while ((line = r.readLine()) != null) {
        String[] fields = line.split(";");
        flightNumbersList.add(fields[0]);
        originsList.add(fields[1]);
        destinationsList.add(fields[2]);
        departureTimesList.add(fields[3]);
        milesList.add(Integer.parseInt(fields[4]));
        pricesList.add(Double.parseDouble(fields[5]));
    }

    String[] flightNumbersArray = flightNumbersList.toArray(EMPTY_STRING_ARRAY);
    String[] originsArray = originsList.toArray(EMPTY_STRING_ARRAY);
    String[] destinationsArray = destinationsList.toArray(EMPTY_STRING_ARRAY);
    String[] departureTimesArray = departureTimesList.toArray(EMPTY_STRING_ARRAY);

    int[] milesArray = new int[milesList.size()];
    for (int i = 0, len = milesArray.length; i < len; ++i) {
        milesArray[i] = milesList.get(i);
    }

    double[] pricesArray = new double[pricesList.size()];
    for (int i = 0, len = pricesArray.length; i < len; ++i) {
        pricesArray[i] = pricesList.get(i);
    }

  }

}
于 2012-11-14T22:57:05.860 に答える
0

以下を行う必要はありません

Scanner lineScanner= new Scanner(line);
lineScanner.useDelimiter(";");

やるだけ

String[] parts = line.split(";");
于 2012-11-14T20:06:09.090 に答える
0

String.split(delimiter)を使用して文字列を分割します。

List<String> list = new ArrayList<String>();
    while (scanner.hasNextLine())
            {
                String line = scanner.nextLine();
                String[] strArr = line.split(";");
                for(String s: strArr){
                 list.add(s); //adding a string into the list
                 System.out.println(s +  " ");
                }
                }

              System.out.println();     

編集:あなたのコメントから

私が投稿したテキストの最初の数字は、フライト番号、出発地、目的地、時間、マイル、価格です。それらはすべて、カテゴリごとに独自の配列を持つ必要があるため、フライト番号には独自の配列が必要であり、オリジンには独自の配列などが必要です。

プロパティごとに配列は必要ありません。クラスを作成してFilghtという名前を付けます。プロパティをインスタンス変数として作成します。

class Flight {
private long filghtNo;
private String origin;
private dest;
private Date time;
private long miles;
private double price;
//setters and getters
}

   List<Flight> list = new ArrayList<Flight>();
    Flight flight = new Flight();
    while (scanner.hasNextLine())
            {
                String line = scanner.nextLine();
                Scanner scan = new Scanner(line);
                if(scan.hasNextLong()){
                 flight.setFilgthNo(scan.nextlong());
                  }
                else if // do the  same for other properties
                }

     list.add(flight);

この方法はよりオブジェクト指向です。

于 2012-11-14T20:06:37.200 に答える