有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

字符串读写文件Java空空间

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

<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();


                 }
            }
}

共 (2) 个答案

  1. # 1 楼答案

    是否以正确的编码打开写入的文件。它看起来像是你写UTF-8,然后用ASCII或任何ISO-8859编码打开它

  2. # 2 楼答案

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

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

    But each letter that is written out has a space in between and also in between lines lots of blank lines are present.

    如果您编写了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("<[^>]+>", ""));
        }
    }