Java 代码删除新行
Java Code removing new line
我正在编写 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");
}
}
行
if(Character.isWhitespace(ch))
{
spaces++;
}
else{
if(spaces>=1)
{ spaces=0;
fos.write(' ');
fos.write(ch);}
在您的代码中确保您将所有白色 space 字符压缩为一个 space。换行符被视为白色 space 字符,因此您也可以跳过它们。
如果您不想将换行符与另一个白色分组space,在这种情况下,快速修复是修改行
if(Character.isWhitespace(ch))
至
if(Character.isWhitespace(ch) && ch != '\n')
更好的方法是逐行读入输入,然后逐行写出。您可以使用(例如)http://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html#readLine-- and http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html#newLine()(在写出行之后)。这样您的实现不依赖于特定于系统的行分隔符(即,其他系统可以使用不同的字符来结束一行而不是 \n
)。
我正在编写 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");
}
}
行
if(Character.isWhitespace(ch))
{
spaces++;
}
else{
if(spaces>=1)
{ spaces=0;
fos.write(' ');
fos.write(ch);}
在您的代码中确保您将所有白色 space 字符压缩为一个 space。换行符被视为白色 space 字符,因此您也可以跳过它们。
如果您不想将换行符与另一个白色分组space,在这种情况下,快速修复是修改行
if(Character.isWhitespace(ch))
至
if(Character.isWhitespace(ch) && ch != '\n')
更好的方法是逐行读入输入,然后逐行写出。您可以使用(例如)http://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html#readLine-- and http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html#newLine()(在写出行之后)。这样您的实现不依赖于特定于系统的行分隔符(即,其他系统可以使用不同的字符来结束一行而不是 \n
)。