1

テキストファイルからデータを取得したいので、スキャナーを使用してテキストファイルからデータを取得します。プロフィール保存パターンです

name
status
friend
friend
.
.
(Blank line)

空行はプロフィールごとに分けられています (フレンドは次の行が空行になるまでループします)。

john 
happy
james

james
sad
john

そして、私はこのようなファイル形式のテキストを取得するようにコーディングします

try{
    Scanner fileIn = new Scanner(new FileReader("testread.txt"));
    while(fileIn.hasNextLine()){           
         String line = fileIn.nextLine();
         String linename = fileIn.nextLine();
         String statusline = fileIn.nextLine();
         println("name "+linename);
         println("status "+statusline);
         while(/*I asked at this*/)){
             String friendName = fileIn.nextLine();
             println("friend "+friendName); 
         }                              
    }
}catch(IOException e){
    println("Can't open file");
}

プロファイル間の空白行を検出するには、どの条件を使用する必要がありますか?

4

4 に答える 4

3

以下のようなカスタム関数を実装するnextLineと、空でない場合に返されます。

 public static String skipEmptyLines(Scanner fileIn) {
    String line = "";
    while (fileIn.hasNext()) {
        if (!(line = fileIn.nextLine()).isEmpty()) {
            return line;
        }
    }
    return null;
}
于 2012-09-27T13:37:39.880 に答える
1

scanner.nextLine()改行を確認するだけです"\n"(つまり、行末を読み取らない""ためです)。等しい場合は、空白行になります..nextLine()"\n"

if (scanner.nextLine().equals("")) {
    /** Blank Line **/
}

ところで、コードに問題があります: -

while(fileIn.hasNextLine()){          
         String line = fileIn.nextLine();
         String linename = fileIn.nextLine();
         String statusline = fileIn.nextLine();

fileIn.hasNextLine()次の 3 行が であることを確認すると仮定していますnot null

実行するたびに、fileIn.nextLine()それが利用可能かどうかを確認する必要があります..そうしないと、例外が発生します...

*編集: - おっと.. 例外を処理したことがわかります.. そうすれば問題はありません.. しかし、それでも上記のコードを変更する必要があります.. きれいに見えません..

于 2012-09-27T13:19:49.563 に答える
0

これを試して...

while(scanner.hasNextLine()){

    if(scanner.nextLine().equals("")){

            // end of profile one...

       }

}
于 2012-09-27T13:21:23.890 に答える
0

メソッドで既存の行を確認した後、次のscanner.hasNextLine()条件を使用できます。

String line = null;
if((line = scanner.nextLine()).isEmpty()){
   //your logic when meeting an empty line
}

lineロジックで変数を使用します。

于 2012-09-27T13:23:59.017 に答える