我正在编写一个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");
}
}
答案 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
)。