簡體   English   中英

如果它們在同一行上,是否可以讀取字符串和數字(來自 TXT 文件)

[英]Is it possible to read a String and Numbers if they're on the same line (From a TXT file)

我很難說出我的問題的標題。

在我給定的作業中,我需要編寫一個程序來讀取文本文件。

例如:(這是在文本文件中,數字是商品的價格。)

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

我的 Output:

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.be/gIMxwKc-pw8

Scanner class 將讀取“令牌”。 當您調用nextDouble時,它會讀取一個標記,而不關心它是一個雙精度數還是一個字符串或諸如此類,然后會嘗試將其轉換為雙精度數。 如果這行得通,那就是你得到的。 如果沒有,你會得到一個InputMismatchException

所以,你想要在這里完成的是Irish Coffee是一個單一的標記(或者可能你的代碼被更新以繼續讀取標記並將它們連接起來,這聽起來更復雜)。 此外,那個逗號在你的字符串中,我打賭你不想要那個。

Scanner 通過使用分隔符分隔標記來工作。 開箱即用,分隔符是“任意數量的空格”(因此,空格和換行符)。

聽起來您需要在這里重新定義分隔符:它可以是被任意數量的空格包圍的逗號,也可以是換行符:

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

會做這項工作。 中間的那個 gobbledygook 是一個正則表達式。 這個內容如下: [a] 任意數量的空格,然后是逗號,然后是任意數量的空格,或者 [b] 換行符。

因為項目名稱可以多於一個單詞,所以我推薦使用一種叫做 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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM