2

スキャナーを使用してファイルを読み取ろうとしています。

私が得ているエラーはNoSuchElementException: No line found 、すべての配列は、ファイルからの情報を格納するための文字列配列です。使用されている区切り文字は「;」です。

private void choice() {
        File file = new File("info.txt");

        try {
            Scanner read = new Scanner(file);
            read.useDelimiter(";");
            while (read.hasNextLine()){
                if (read.hasNext()){
                    realName[i] = read.next();
                } else {
                    break;
                }
                if (read.hasNext()){
                    userName[i] = read.next();                       
                } else {
                    break;
                }
                if (read.hasNext()){
                    password[i] = read.next();
                } else {
                    break;
                }
                if (read.hasNext()){
                    address[i] = read.next();
                } else {
                    break;
                }
                if (read.hasNext()){
                    contact[i] = read.next();
                } else {
                    break;
                }
                if (read.hasNext()){
                    cardType[i] = read.next();
                } else {
                    break;
                }
                if (read.hasNext()){
                    cardNo[i] = read.next();
                } else {
                    break;
                }
                i++;
             }
        }
        catch ......
    }

上記のコードを使用すると、常にNoSuchElementException: No line found.

今、私は以下のコードを使用しています..すべてがエラーなしでうまく印刷されます.

private void choice() {
        File file = new File("info.txt");

        try {
            Scanner read = new Scanner(file);
            read.useDelimiter(";");
            while (read.hasNextLine()){
                realName = read.nextLine();
                System.out.println(realName);
            }
        }
        catch ......
    }

すべてが行ごとにきれいに印刷されます。問題はありませんが、これは私が望んでいたものではありません。それらを配列に格納したい。

コーディングの最初の部分で間違ったことはありますか?

read.hasNext()ではなくも使用しますread.hasNextLine()。しかし、エラーもあります。

親切な魂が助けてくれますか?

==編集 申し訳ありません。info.txt にデータを表示していませんでしたが、次のようになります。

Mr Dash;dash;dash123;Dash Lane 1;414924934;VISA;1219240241029021092
Mr Long;long;long123;Long Lane 1;3924929;MASTERCARD;123902039109329
4

2 に答える 2

2

hasNextLineループ内で何度も呼び出しnextLineているため、に達するとエラーが発生する可能性がありますEOF。区切り文字を使用しているので、1 回の反復で 1 行から各単語を読み取ろうとしていると思います。これを試して:

int i=0;
while (read.hasNextLine()){                
    realName[i] = read.next();
    userName[i] = read.next();
    password[i] = read.next();
    address[i] = read.next();
    contact[i] = read.next();
    cardType[i] = read.next();
    cardNo[i] = read.next();
    i++;               
}
于 2013-04-28T10:29:49.333 に答える
1

すべての前にread.nextLine()チェックする必要がありread.hasNextLine()ます。そうしないと、例外が発生する可能性があります。

あなたのループのどこかにあるwhileかもしれません、あなたはやっています、read.nextLine()そして次の行はありません(EOFに達しました)

      while (read.hasNextLine()){
            for(int i=0; i<=10; i++){
                    realName[i] = read.nextLine();
                    userName[i] = read.nextLine(); // check for read.hasNextLine();
                    password[i] = read.nextLine(); // check for read.hasNextLine();
                    address[i] = read.nextLine(); // check for read.hasNextLine();
                    contact[i] = read.nextLine(); // check for read.hasNextLine();
                    cardType[i] = read.nextLine(); // check for read.hasNextLine();
                    cardNo[i] = read.nextLine(); // check for read.hasNextLine();
           }
      }
于 2013-04-28T10:24:53.033 に答える