1

重複の可能性:
Java - ファイル内の行を検索して削除

テキスト ファイルから行全体を削除しようとしていますが、スペースのない連続したテキスト行が 1 行しかない場合は、その行を削除できました。文字列間にスペース区切りがある場合、何も削除できません。次のようにコードします。

import java.io.*;
import java.util.Scanner;


public class removebooks {
     // construct temporary file
    public static void main(String[]args)throws IOException {
    String title;

     Scanner titlerem= new Scanner (System.in);
     System.out.println("Enter Title to remove from file");
     title = titlerem.next ();

     // construct temporary file
     File inputFile = new File("books.txt");
     File tempFile = new File(inputFile + "temp.txt");

     BufferedReader br = new BufferedReader (new FileReader("books.txt"));
     PrintWriter Pwr = new PrintWriter(new FileWriter (tempFile));
     String line = null;

     //read from original, write to temporary and trim space, while title not found
     while((line = br.readLine()) !=null) {
         if(line.trim().equals(title)){
             continue;          }
         else{
             Pwr.println(line);
             Pwr.flush();

         }
     }
     // close readers and writers
     br.close();
     Pwr.close();
     titlerem.close();

     // delete book file before renaming temp
     inputFile.delete();

     // rename temp file back to books.txt
     if(tempFile.renameTo(inputFile)){
            System.out.println("Update succesful");
        }else{
            System.out.println("Update failed");
        }
    }
}

テキスト ファイルの名前は books.txt で、内容は単純に次のようになります。

bookone author1 subject1
booktwo author2 subject2
bookthree author3 subject3
bookfour author4 subject4

助けていただければ幸いです

4

3 に答える 3

3

使わない理由

if(line.trim().startsWith(title))

それ以外の

if(line.trim().equals(title))

equals()両方の文字列が等しい場合にのみ真であり、 ;)で始まるstartsWith()場合に真であるためです。line.trim()title

于 2013-01-10T20:20:42.947 に答える
1

ファイルを1行ずつ読んでいるように。以下を利用できます

  if(line.contains(title)){
     // do something
  }

この場合、タイトルだけに制限されることはありません。

文字列 API

于 2013-01-10T20:24:18.317 に答える
0

br.readLine()変数の値lineを「bookone author1 subject1」に設定します。

Scanner.next()空白で区切ります。ファイル内の行をチェックする前に、 Scanner.next() へのすべての呼び出しを単一の文字列に統合する必要があります (それが意図されている場合)。

あなたの場合、「bookone author1 subject1」と入力すると、変数の値はtitleへの呼び出し後に「bookone」になりますScanner.next()

于 2013-01-10T20:22:09.360 に答える