0

Scanner を使用して、*、スペース、アルファベットを含むテキスト ファイルを読み込んでいます。2 つ以上のスペースが連続して発生する場合があります。例えば:

****  AAAAA* *    ****
    *******    AAAAAA*** *

私は次のコードを書きました:

lineTokenizer = new Scanner(s.nextLine());
int i=0;
if (lineTokenizer.hasNext()) {
    //lineTokenizer.useDelimiter("\\s");
    System.out.println(lineTokenizer.next());
    //maze[0][i]=lineTokenizer.next();
    i++;
}

lineTokenizer は、入力ファイルから * を超えて読み取ることはなく、文字が迷路配列に格納されることもありません。どこが間違っているのか教えてもらえますか? ありがとう!

4

4 に答える 4

2

FileInputStreamsを使用してファイルを読み取ることもできますBufferedReader

Scanner個人的には、コンソール入力のみに使用します。

于 2013-02-21T08:13:45.920 に答える
1

if の代わりにループを使用する必要があると思います。

3 行目を次のように変更してみてください。

while (lineTokenizer.hasNext())
于 2013-02-21T08:04:17.430 に答える
1

if条件を使用しているため、ポインターは先に進みません。スキャナーからデータを継続的に読み取るには、ループを使用する必要があります。それが役立つことを願っています。

于 2013-02-21T08:25:04.893 に答える
0

あなたが別のものを試している間、コードは何度も変更されていると思います。迷路の初期化をどのように処理するかはわかりませんが、ArrayIndexOutOfBounds を避けるために、代わりにリスト内のリストを使用します。私はあなたが何を望んでいるのかについていくつか推測し、これを提案しました:

List<List<String>> maze = new ArrayList<>();        
Scanner s = new Scanner("****  AAAAA* *    ****\n    *******    AAAAAA*** *");
while (s.hasNextLine()) {
    List<String> line = new ArrayList<>();
    Scanner lineTokenizer = new Scanner(s.nextLine());
    lineTokenizer.useDelimiter("\\s+");
    while (lineTokenizer.hasNext()) {
        String data = lineTokenizer.next();
        System.out.println(data);
        line.add(data);
    }
    lineTokenizer.close();
    maze.add(line);
}
s.close();

私はあなたの目標を完全には理解していませんでした。これはあなたが望むことをしますか?上記のコードは、次のリストを提供します。[[****, AAAAA*, *, ****], [*******, AAAAAA***, *]]

于 2013-02-21T08:18:23.967 に答える