0

私のコードが悪いと思われる場合は申し訳ありませんが、私はプログラミングの経験があまりありません。.txtからDate-Name-Address-etc。の形式でテキストを転送する必要があります。

ファイルを読み込んでから、String.split( "-")で文字列を分割しています。ループに問題があります。

    try{
        File file = new File("testwrite.txt");
        Scanner scan = new Scanner(file);
        String[] test = scan.nextLine().split("-");
        while(r<100){
            while(c<6){
                data[r][c] = test[c];
                test = scan.nextLine().split("-");
                c++;
            }
            r++;
            c = 0 ;
        }
        System.out.println(data[1][5]);
    }catch(Exception e){
        System.out.println("Error: " + e.getMessage());
    }
4

3 に答える 3

2

2次元配列は単なる「配列の配列」であるため、結果を直接使用splitして1行のデータを格納できます。

            File file = new File("testwrite.txt");
            Scanner scanner = new Scanner(file);
            final int maxLines = 100;
            String[][] resultArray = new String[maxLines][];
            int linesCounter = 0;
            while (scanner.hasNextLine() && linesCounter < maxLines) {
                resultArray[linesCounter] = scanner.nextLine().split("-");
                linesCounter++;
            }
于 2012-11-21T19:46:33.433 に答える
0

以下を使用してタブ区切りファイルを分割しました。

BufferedReader reader = new BufferedReader(new FileReader(path));
int lineNum = 0; //Use this to skip past a column header, remove if you don't have one
String readLine;
while ((readLine = reader.readLine()) != null) { //read until end of stream
    if (lineNum == 0) {
        lineNum++; //increment our line number so we start with our content at line 1.
        continue;
     }
     String[] nextLine = readLine.split("\t");

     for (int x = 0; x < nextLine.length; x++) {
         nextLine[x] = nextLine[x].replace("\'", ""); //an example of using the line to do processing.

         ...additional file processing logic here...
     }
}

繰り返しになりますが、私の例では、タブ(\ t)で分割していますが、改行文字を除いて、他の文字でも同じように簡単に分割できます。

readline ()のJavadocに A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed.よる。

行を必要に応じて分割したら、必要に応じてそれらを配列に割り当てます。

于 2012-11-21T19:32:06.367 に答える
0

scan.nextLine() を頻繁に呼び出しているようです。scan.nextLine() を呼び出すたびに、現在の行を超えて Scanner を進めます。ファイルに 100 行あり、それぞれに 6 つの「エントリ」(「-」で区切られている) があると仮定するとtest = scan.nextLine().split("-");、while ループの最後に移動し (ただし、ループ内にある)、行ごとに 1 回呼び出されるようにします。

編集...

提案された解決策: フォーム内のファイルが与えられた場合、

abcxyz

abcxyz ... (合計100回)

次のコードを使用します。

try{
    File file = new File("testwrite.txt");
    Scanner scan = new Scanner(file);
    String[] test = scan.nextLine().split("-");
    while(r<100){
        while(c<6){
            data[r][c] = test[c];
            c++;
        }
        r++;
        c = 0 ;
        test = scan.nextLine().split("-");
    }
    System.out.println(data[1][5]);
}catch(Exception e){
    System.out.println("Error: " + e.getMessage());
}

次に、data[line][index] を使用してデータにアクセスします。

于 2012-11-21T19:21:13.907 に答える