【问题标题】:check spaces using ascii code使用ASCII码检查空格
【发布时间】:2013-03-13 09:15:35
【问题描述】:

我正在尝试在读取文件时从文件中删除空格。我通过检查 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();

}

【问题讨论】:

  • ASCII 127 是 DEL,空格是 32。

标签: java char ascii


【解决方案1】:

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

if (input != ' ')

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

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

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

【讨论】:

    【解决方案2】:

    您可以使用包装在 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);
                }
            }
        }
    

    【讨论】:

    • (c = in.read()) != null 返回(无法从 int 转换为 char)
    • 你声明 c 为 char 了吗?
    • 是的,它不应该是一个字符吗?
    • 是的。对于那个很抱歉。我稍微修改了解决方案。现在它一次读取一行文本并一次处理每一行一个字符。经测试。工作。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      你有两个选择:

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

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

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

      【讨论】:

        【解决方案5】:

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

        希望对你有帮助

        【讨论】:

          【解决方案6】:
          sc = new FileInputStream(new File ("D:\\Empty.txt"));
          
          while(sc.hasNextLine()){
              input = sc.nextLine().replace(" ","");
              System.out.println(input);
          }
          

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多