0

ファイルから読み取り、ファイルに書き込みたい。入力ファイルは以下の通り

<ORLANDO>   <0%>
    As I remember, Adam, it was upon this fashion bequeathed me by will but poor a thousand crowns, and, as thou sayest,
<ORLANDO>

"A s   I   r e m e m b e r    A d a m    i t   w a s   u p o n   t h i s   f a s h i o n   b e q u e a t h e d   m e   b y   w i l l   b u t   p o o r   a   t h o u s a n d   c r o w n s    a n d    a s   t h o u   s a y e s t    c h a r g e d   m y   b r o t h e r   o n  ..."

タグ付きの行を削除し、句読点をスペースに置き換えるJavaプログラムを作成しました。しかし、書き出された各文字にはスペースがあり、行間にも空白行がたくさんあります。それらを削除するには?. 助けてください。

String line=null;
    try {
        BufferedReader br=new BufferedReader( new FileReader("filename"));
        PrintWriter writer = new PrintWriter(new FileWriter("filename"));
    try {
            while((line=br.readLine())!=null)
            {

                if(!line.contains("<"))
                {
                    line=(line.replaceAll("\\p{Punct}",""));

                    writer.println(line);
                    writer.flush();


                 }
            }
}
4

2 に答える 2

5

デフォルトでは、PrintWriter でファイルを開くと、ファイルが切り捨てられます。代わりに追加するように設定できますが、どちらの方法でも、この方法で読み取っているファイルを書き換えることはできません。

代わりに、新しいファイルを作成してそこに書き込む必要があります。終了したら、オリジナルを削除してコピーの名前を変更できます (または、まったく同じ場合はコピーを削除します)。

しかし、書き出された各文字にはスペースがあり、行間にも空白行がたくさんあります。

これは、UTF-16 で書き、ASCII または UTF-8 として読み取った場合に発生します。これを回避する方法は、デフォルトではない UTF-16 を使用しないことです。

try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("filename"), StandardCharsets.UTF_8));
     PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("filename.tmp"), StandardCharsets.UTF_8))) {
    for(String line; (line = br.readLine())!=null;) {
        pw.println(line.replaceAll("<[^>]+>", ""));
    }
}
于 2013-01-15T09:50:55.103 に答える
0

書き込まれたファイルを正しいエンコーディングで開いていますか。UTF-8を記述し、ASCIIまたは任意のISO-8859エンコーディングで開いているようです。

于 2013-01-15T09:45:38.790 に答える