阅读及;编写文件-Java空空间

阅读及;编写文件-Java空空间,java,string,file-io,filewriter,replaceall,Java,String,File Io,Filewriter,Replaceall,我想从文件中读取数据,然后写入文件。输入文件如下所示 <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

我想从文件中读取数据,然后写入文件。输入文件如下所示

<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  ..."

正如我所记得的,亚当,正是在这种情况下,我自愿留下了一千枚可怜的王冠,正如你所说,
“s I r e m e m A A m I t w A s f A s h I o n b e e m A A m I t w A s f A s h I o n b e o o o o o o r A s A A s h A o o o o o o o o o o o e r r o n d A s A s A o o o o o o o o o o o s A A s h A o o o o o o o o o o o o o o o o o o o o e r r g e m e e e o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o
我已经编写了一个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();


                 }
            }
}
字符串行=null;
试一试{
BufferedReader br=新的BufferedReader(新文件读取器(“文件名”);
PrintWriter writer=新的PrintWriter(新的FileWriter(“文件名”);
试一试{
而((line=br.readLine())!=null)
{

如果(!line.contains)("您是否使用正确的编码打开已写入的文件。看起来您使用的是UTF-8并使用ASCII或任何ISO-8859编码打开该文件。

您是否使用正确的编码打开已写入的文件。看起来您使用的是UTF-8并使用ASCII或任何ISO-8859编码打开该文件。

当您使用PrintWriter打开文件时,默认情况下它是trun对文件进行cate。您可以将其改为append,但无论哪种方式,您都无法重写以这种方式读取的文件

相反,您应该创建一个新文件并写入该文件。完成后,您可以删除原始文件并重命名副本(或者删除完全相同的副本)

但是写出来的每封信之间都有一个空格,而且在行间有很多空行

如果您编写了UTF-16,但将其读取为ASCII或UTF-8,则会发生这种情况。避免这种情况的方法是不使用UTF-16,因为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("<[^>]+>", ""));
    }
}
try(BufferedReader br=new-BufferedReader(new-InputStreamReader(new-FileInputStream(“filename”),StandardCharsets.UTF_8));
PrintWriter pw=新的PrintWriter(新的OutputStreamWriter(新的FileOutputStream(“filename.tmp”),StandardCharsets.UTF_8))){
for(字符串行;(line=br.readLine())!=null;){
println(line.replaceAll(“]+>”,“);
}
}

默认情况下,当您使用PrintWriter打开文件时,它会截断文件。您可以将其设置为“附加”,但无论采用哪种方式,您都无法重写以这种方式读取的文件

相反,您应该创建一个新文件并写入该文件。完成后,您可以删除原始文件并重命名副本(或者删除完全相同的副本)

但是写出来的每封信之间都有一个空格,而且在行间有很多空行

如果您编写了UTF-16,但将其读取为ASCII或UTF-8,则会发生这种情况。避免这种情况的方法是不使用UTF-16,因为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("<[^>]+>", ""));
    }
}
try(BufferedReader br=new-BufferedReader(new-InputStreamReader(new-FileInputStream(“filename”),StandardCharsets.UTF_8));
PrintWriter pw=新的PrintWriter(新的OutputStreamWriter(新的FileOutputStream(“filename.tmp”),StandardCharsets.UTF_8))){
for(字符串行;(line=br.readLine())!=null;){
println(line.replaceAll(“]+>”,“);
}
}

运行了代码,但无法重复您的问题。您的输入文件的编码是什么?代码对我来说很好。我所做的就是删除多余的
尝试
您有。检查编码问题。运行了代码,但无法重复您的问题。您的输入文件的编码是什么?代码对我来说很好。我所做的就是删除它额外
尝试
您有..检查编码问题。更可能的情况是相反的-如果原始文件是UTF-16,并且您以Windows-1252读取它,那么您将在每个实字符之间获得nul。更可能的情况是相反的-如果原始文件是UTF-16,并且您以Windows-1252读取它,那么您将获得nul赌注在每个真实角色之间。我假设不同的文件用于读写。+1表示您的洞察力。:)我假设不同的文件用于读写。+1表示您的洞察力。:)