2013-03-23 177 views
1

我试图在读取文件时删除空格。我通过检查字符的ascii代码来做到这一点..如果它不是127(空格),然后打印出来。使用ASCII代码检查空格

什么是更好的方式来思考它? 或如何解决这个问题?

private FileInputStream sc; 
private static char input; 

public void openFile(){ 
try{ 
    sc = new FileInputStream(new File ("D:\\Empty.txt")); 
    input = (char) sc.read(); 
    if(input != 127){ 
     System.out.println(input); 
    } 
}catch(FileNotFoundException e){ 
    e.printStackTrace(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
} 

public static void main(String[] args) { 

    ParsingStrings ps = new ParsingStrings(); 
    ps.openFile(); 

} 
+0

ASCII 127为'DEL',空格为32. – jlordo 2013-03-23 15:40:07

回答

3

您可以使用包装在BufferedReader中的字符流(如FileReader),因为它逐字符读取。我怀疑你会在阅读一个字节时遇到一些问题,并按照你所做的方式投射成一个角色。

String s; 
    BufferedReader in = new BufferedReader(new FileReader("file.txt")); 
    while ((s = in.readLine()) != null) { 
     for (char c : s.toCharArray()) { 
      if (c != ' ') { 
       System.out.println(c); 
      } 
     } 
    } 
+0

'(c = in.read())!= null'返回(无法从int转换为char) – 2013-03-23 16:25:42

+1

您是否声明c为char? – 2013-03-23 16:31:24

+0

是的,它不应该是一个字符? – 2013-03-23 16:37:29

3

为什么你不使用char型文字更清晰(而且显然是正确的)?

if (input != ' ') 

此外,Streams必须用于读取二进制数据。要阅读文本,你应该使用Reader。阅读Java IO tutorial

当然,你的方法不应该吃这样的例外。它应该抛出它们,或者至少将它们包装在另一个异常中并抛出这个异常。

最后,读者应该是openFile()方法的局部变量而不是字段。它应该在finally块中关闭,或者使用Java 7的try-with-resources构造。

0

你有两个选择:

  1. 如果你想从输入删除空格,看看在FilterInputStream类。覆盖read()方法:如果它读取空格字符,让它进一步读取一个字符。

  2. 如果要从输出中删除空格,请查看FilterOutputStream类。重写write(int)方法:如果它被调用来写入空格字符,则不要执行任何操作。

在您的具体情况下,我会选择后一种选择,因为我认为实施起来更容易一些,但选择是您的选择。

0

使用BufferedReader和InputStreamReader会帮助你。 这样,您可以使用.readLine()读取文件中的每一行,然后使用.charAt()从该行读取每个字符。

希望这有助于

0
sc = new FileInputStream(new File ("D:\\Empty.txt")); 

while(sc.hasNextLine()){ 
    input = sc.nextLine().replace(" ",""); 
    System.out.println(input); 
} 

我想检查你想从整个文件中删除空间,并打印只有一个字符,而不是......是吗?