0

私はJavaを学んでいる学生です(今年始めたばかりです。卒業したばかりなので、高校の先生にも助けを求めることはできません)。文字列を複数の配列に変換する方法について助けが必要です(? )。

ただし、この後、行き詰まります (目的のために文字列を分解する方法が見つからないため)。

ファイルはこのように読み込まれます

入力:最初の行はケースの数になります。それぞれのケースで、最初の行は Susan の勤務スケジュールになり、2 行目は Jurgen の勤務スケジュールになります。勤務スケジュールは、勤務する月の日付 (1 ~ 30) になります。3 行目は、最初の TV のサイズになります。

問題のファイル:

3

2 5 10

2 4 10

60

2 4 10

2 5 10

60

1 2 3 4 7 8 10 12 14 16 18 20 24 26 28 30

1 2 3 6 9 10 17 19 20 21 22 23 25 27 28 29

20

どうすればいいのかわかりません。を試しまし.split()たが、文字列の最初の行でしか機能しないようです。あなたが持っているかもしれないどんな助け/ヒントも大歓迎です!

4

4 に答える 4

1

ファイルの読み取り方法に応じて、次のようなものを使用している可能性があります。

BufferedReader in = new BufferedReader(new FileReader("foo.in"));

次に、ファイルを 1 行ずつ読み取るには、次のようにします。

String theLine = in.readLine();

これで、行に対応する文字列が得られました (この場合は最初の行ですが、何度も呼び出しreadLine()てすべてを読み取ることができます) 。私はあなたが提案していると思いますが、むしろ読者は一度に一行ずつ取ります.

したがって、すべての行を配列に保持したい場合は、配列を宣言してから、各行を配列に読み込むだけです。何かのようなもの:

// Declare an array to put the lines into
int numberOfLines = 10;
String[] arrayOfStrings = new String[numberOfLines];

// Read the first line
String aLine = in.readLine();

int i = 0;

// If the line that has been read is null, it's reached the end of the file
// so stop reading
while(aLine != null){
    arrayOfStrings[i] = aLine;
    i++;
    aLine = in.readLine();
}

// arrayOfStrings elements are now each line as a single String!

もちろん、最初のケースでは読み取るファイルの行数がわからない場合があるため、配列のサイズを宣言するのは困難です。次に、 などの動的にスケーリングするデータ構造を調べることができますが、ArrayListそれは別の問題です。

于 2013-05-21T21:59:37.793 に答える
1

入力を行ごとに読み取り、正規表現を適用して、次のように文字列から数値を分離できます。

String numbers = "1 2 3 4 7 8 10 12 14 16 18 20 24 26 28 30";
String[] singleNumbers = numbers.split(" ");

これらの数値は、singleNumbers 配列にスペースで区切られます

于 2013-05-21T22:00:05.320 に答える
0

がすでにある場合BufferedReader、次のようなことを試して、行と列の多次元配列を取得できます。

  BufferedReader reader = ...;
  List<String[]> lines = new ArrayList<String[]>();
  String input;
  while((input = reader.readLine()) != null){
    if (!input.trim().isEmpty()){
      lines.add(input.split(" "));
    }
  }

  String[][] data = lines.toArray(new String[lines.size()][]);
于 2013-05-21T22:05:20.100 に答える
0

ねえ、私はあなたのために素晴らしい解決策を手に入れました。

次のように各生徒のデータを保存するクラスを作成するだけです

  import java.util.List;

  public class Student {

private int noOfCases;
private List<String> workSchedule;
private List<String> initialTV;

//getter setters
}

そしたらこれ…

public static void main(String[] args) {

    //3 students for reading 9 lines
    //Susan,  Jurgen and You ;)
    Student[] students = new Student[3];

    int linesRead = 0;

    String aLine = null;

    // read each line through aLine
    for (Student student : students) {

        //use buffered/scanner classes for reading input(each line) in aLine
        while (aLine != null) {
            ++linesRead;
            if (linesRead == 1) {
                student.setNoOfCases(Integer.valueOf(aLine));
                ++linesRead;
            } else if (linesRead == 2) {
                student.setWorkSchedule(Arrays.asList(aLine.split(" ")));
                ++linesRead;
            } else if (linesRead == 3) {
                student.setInitialTV(Arrays.asList(aLine.split(" ")));
            } else {
                linesRead = 0;
            }
        }
    }
}
}

より多くの行/学生のレコードを読み取る必要がある場合は、学生配列のサイズを変更してください!!

于 2013-05-21T23:44:13.983 に答える