如果字符串和数字在同一行,是否可以读取它们(从TXT文件中)。

问题描述 投票:0回答:1

我很难写出我问题的题目。

在我给定的作业中,我需要写一个程序,从一个文本文件中读取数据。

例如:(这是在文本文件中,数字是商品的价格。

Cappuccino, 3.50

Espresso, 2.10

Mochaccino, 5.99

Irish Coffee, 7.99

Caffe Americano, 6.40

Latte, 1.99

这是我读取文本文件的代码。

public void readFile(){
        while(x.hasNext()){
            String item = x.next();
            Double price = x.nextDouble();

            System.out.printf("%s $%.2f \n", item, price);

        }//end of whileLoop
    }

    public void closeFile(){
        x.close();
    }

我的输出

Cappuccino, $3.50
Espresso, $2.10
Mochaccino, $5.99
Exception in thread "main" java.util.InputMismatchException
        at java.base/java.util.Scanner.throwFor(Scanner.java:939)
        at java.base/java.util.Scanner.next(Scanner.java:1594)
        at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
        at ReadTextFile.readFile(MiniProject.java:22)
        at MiniProject.main(MiniProject.java:400)

我的输出: 代码工作得很好,也很正常,直到它读到一个菜单项,其中有两个字,而不是一个单字,我怎样才能改变我的代码,在读价格之前读出两个字?

下面是一个视频,我希望我的程序能够读取文件--。https:/youtu.begIMxwKc-pw8

java
1个回答
0
投票

由于项目名称可以是多个单词,我建议使用一种叫做split()的方法。这样就会根据某个字符串进行拆分,并返回一个数组,将字符串中被拆分的部分按你给该方法的值进行拆分。例如,"I do,a".split(",")将在逗号后的空格上进行分割,并返回数组["I do","a"]。在你的例子中,你要执行这个操作的字符串将通过使用scan.nextLine()获得。然后你就有了第一部分和你感兴趣的第二部分。要将数组中的第二个元素转换为双数,你可以使用Double.parseDouble(arr[1])。

这段代码就可以了。

public void readFile(){
    while(x.hasNextLine()){
        String[] nextLineArr = x.nextLine().split(", ");
        String item = nextLineArr[0];
        double price = Double.parseDouble(nextLineArr[1]);

        System.out.printf("%s $%.2f %n", item, price);

    }//end of whileLoop
}

1
投票

这段代码的作用是: Scanner 类将读作'tokens'。当你调用 nextDouble它将读取一个标记,而不关心它是一个双数还是一个字符串或其他什么,然后将尝试将其转换为双数。如果成功了,那就是你所得到的。如果不成功,你会得到一个 InputMismatchException.

所以,你想在这里完成的就是 Irish Coffee 是一个单一的标记(也可能是你的代码已经更新,以继续读取标记并将它们连接起来,这听起来更复杂)。此外,那个逗号在你的字符串中,我敢打赌,你不希望这样。

扫描器的工作原理是通过使用一个符号来分隔标记。定界符. 通常情况下,定界符是 "任意数量的空白"(所以,空格和换行符)。

听起来你需要的是重新定义定界符。要么是逗号,要么是任意数量的空格,要么是换行。

scanner.useDelimiter("(\\s*,\\s*)|\r?\n");

就可以了 中间那个乱七八糟的东西是一个regex。这个是这样的。要么是[a]任意数量的空格,要么是逗号,要么是任意数量的空格,要么是[b]换行。

© www.soinside.com 2019 - 2024. All rights reserved.