有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何使用Java PushbackInputStream读取数字

我需要从^{中读出一个数字(可以是整数、双精度、正数、负数等)。我是否需要逐字节读取,测试它们是否在0-9之间,并测试定界空间

或者如何使用空格作为分隔符将流中的其余部分读入字符串数组

编辑

让我说清楚一点。我想对涉及运算符和数字的表达式进行一些解析。我可能(如果不是,你的好方法是什么?)每当我遇到一个数字的部分时,需要使用PushbackInputStream,而不是运算符,因为在这种情况下,我将未读/回推我刚刚错误读取的数字的部分。例如,我想解析“10+20*30”,我读1,它不在我的操作符的enum中,我把它放回去,尝试从PushbackInputStream中读取一个数字。那么在这里怎么做呢


共 (1) 个答案

  1. # 1 楼答案

    您可以使用Scanner类来实现这一目的

    http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

    使用此代码从名为psi的PushbackInputStream中读取单个整数:

     Scanner sc = new Scanner(_psi_);
     int i = sc.nextInt();
    

    扫描仪也有读取其他数据类型的方法。如果要从文本文件中读取(少量)未知的int,可以使用以下方法:

    Scanner sc = new Scanner(_psi_);
    List<Integer> ints = new ArrayList<Integer>();
    while(sc.hasNextInt())
      ints.add(sc.nextInt());
    
    Integer[] theIntArray = ints.toArray(new Integer[]);
    

    编辑:作为一种替代方法,您可以读取单个字符(我会使用InputStreamReader),并检查是否有数字的一部分。如果它是数字的一部分,请将当前字符附加到字符串(*)的末尾。当你看到一个操作符时,立即用Integer解析这个字符串。例如parseInt()

    (*)通过附加单个字符来构建字符串是不好的做法,因为它非常慢。使用StringBuilder通常是更好的选择