Java - 如何读取文件的整数或双精度/浮点数

时间:2016-04-02 03:59:18

标签: java regex java.util.scanner

到目前为止我有这个代码,但是我在使用分隔符方面遇到了麻烦(我是regex和文件阅读的新手)。

File file = new File(ROOT_FOLDER + fname);

    Scanner scanner = null;
    try {
        Pattern p = Pattern.compile("(?=\\D+)(?=[^\\.])");
        scanner = new Scanner(file).useDelimiter(p);

        while (scanner.hasNext()) {
            String next = scanner.next();
            UI.println(next);
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
        throw new Error(e);
    } finally {
        if (scanner != null)
            scanner.close();
    }

文件样本

Samples from database of fake names from http://www.fakenamegenerator.com/
All details are fictious!!

Mr. Jake M Goodwin 11 Yarmouth Road Mahora 4120 JakeGoodwin@teleworm.us (022) 6735-347 1998 Rolls-Royce Silver Spur 100.9 184
Mr. Samuel D Law 140 Small Street Dunedin Central 9016 SamuelLaw@cuvox.de (028) 0699-710 2001 Dodge Durango 113 180

对我来说,如果我使用默认空格分隔符,则(028)之类的数字将被检测为hasNextDouble()的数字(但使用正则表达式)我认为无论如何我只能使用hasNext()

我需要使用的分隔符是什么?我想的是:任意数量的非数字和连续,只要它不是一个点。

1 个答案:

答案 0 :(得分:1)

您可以使用:

IsPressed

输入:

  

来自http://www.fakenamegenerator.com/的虚假名称数据库的样本   所有的细节都是虚构的! Jake M Goodwin 11 Yarmouth Road Mahora 4120 JakeGoodwin@teleworm.us(022)6735-347 1998 Rolls-Royce Silver Spur 100.9 184   Samuel D Law先生140小街达尼丁中央9016 SamuelLaw@cuvox.de(028)0699-710 2001 Dodge Durango 113 180

输出:

  

11   4120   022   6735   347   1998年   100.9   184   140   9016   028   0699   710   2001年   113   180