1

我正在尝试在读取文件时从文件中删除空格。我通过检查 char 的 ascii 代码来做到这一点。如果它不是 127(空格),则将其打印出来。

有什么更好的思考方式?或者如何以这种方式解决它?

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

}
4

6 回答 6

4

为什么不通过使用 char 文字使其更清晰(并且显然是正确的)?

if (input != ' ')

此外,必须使用 Streams 来读取二进制数据。要阅读文本,您应该使用阅读器。阅读Java IO 教程

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

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

于 2013-03-23T15:38:32.327 回答
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);
            }
        }
    }
于 2013-03-23T15:39:53.247 回答
1

ASCII 空间是 32,127 是 DEL。见http://en.wikipedia.org/wiki/ASCII

于 2013-03-23T15:40:19.760 回答
0

你有两个选择:

  1. 如果要从输入中删除空格,请查看FilterInputStream该类。重写read()方法:如果它读取一个空格字符,让它再读取一个字符。

  2. 如果要从输出中删除空格,请查看FilterOutputStream该类。重写write(int)方法:如果调用它写一个空格字符,让它什么都不做。

在您的特定情况下,我会选择后一种选项,因为我认为它更容易实现,但选择权在您。

于 2013-03-23T15:40:28.207 回答
0

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

希望这可以帮助

于 2013-03-23T15:43:23.910 回答
0
sc = new FileInputStream(new File ("D:\\Empty.txt"));

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

我认为不是只检查一个字符,而是要从整个文件中删除空间并打印它......是吗?

于 2013-03-23T15:50:54.903 回答