Java代码删除新行

时间:2015-06-24 13:01:33

标签: java newline

我正在编写一个java代码,用于从命令行参数传递的文本文件中删除多余的空格。 此代码成功运行,但它也从每行删除\n。 有人能告诉我为什么会发生这种情况并解决这个问题吗?

这是代码

import java.io.*;

//remove extra spaces from a file

class q3
{
    public static void main(String args[]) throws IOException
    {
        File ff=new File(args[0]);
        if(!ff.exists())
        {
            System.out.println("Source file not found");
            System.exit(0);
        }

        File t=new File("temp.txt");
        t.createNewFile();

        FileInputStream fis=new FileInputStream(ff);
        FileOutputStream fos=new FileOutputStream(t);

      int ch,spaces=0,nn=0;

      while((ch=fis.read())!=-1)
      {
          if(ch=='\n')
              nn++;

          if(Character.isWhitespace(ch))
          {
              spaces++;
          }
          else{
             if(spaces>=1)
            { spaces=0;
                fos.write(' ');
                fos.write(ch);}
            else {  fos.write(ch) ;  }
        }
      }

      fis.close();
      fos.close();

        ff.delete();

        if(t.renameTo(ff))
            System.out.println("Program Execution Successful, having "+(1+nn)+ " lines");

    }

}

1 个答案:

答案 0 :(得分:2)

if(Character.isWhitespace(ch))
{
    spaces++;
}
else{
if(spaces>=1)
{ spaces=0;
fos.write(' ');
fos.write(ch);}
代码中的

确保您将所有空白字符压缩到一个空格中。换行符被视为空格字符,因此您也可以跳过这些字符。

如果您不想在这种情况下将换行符与其他空格分组,则可以快速修复该行

if(Character.isWhitespace(ch))

if(Character.isWhitespace(ch) && ch != '\n')

更好的方法是读入您的输入行 - 逐行并逐行写出。您可以使用(例如)http://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html#readLine--http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html#newLine()(在写出行之后)。这样,您的实现不依赖于特定于系统的行分隔符(即,其他系统可以使用不同的字符来结束行而不是\n)。