JAVA:在字符串后重置分隔符以使用.nextDouble

时间:2014-02-11 08:30:55

标签: java delimiter

注意:不想要这个问题的答案,因为我想自学,但我很困惑,想知道该怎么做。

因此,对于练习,我必须读取一个输入文件并回显它。

实践问题是创建一个ATM事务,输入文件的一行读取:     Stacy Jones,300 D 100

我必须将其输出为:

name
current balance
action (D means deposit)
transaction amount

我目前有名字,为了得到当前的余额,我更改了分隔符以逗号结束了行,但我的问题是在当前余额之前仍有空格(即300)

这是我的代码:

try {
    FileInputStream stream = new FileInputStream("src/transactions.txt");
    fileIn = new Scanner(stream);

    fileIn.useDelimiter(",");
    name = fileIn.next();
    System.out.println("Customer Name: " + name);
    fileIn.reset();
    balance = fileIn.nextDouble();
    System.out.printf("Checking balance before transaction: %.2f", balance);

} catch (FileNotFoundException e) {
    System.out.println("Transactions cannot be found");
}

我收到的错误是:

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:857)
at java.util.Scanner.next(Scanner.java:1478)
at java.util.Scanner.nextDouble(Scanner.java:2404)
at MP3.main(MP3.java:30)

2 个答案:

答案 0 :(得分:0)

问题在于您的输入。当你做fileIn.nextDouble()时,你期待双倍。你从文件中获得的实际上是字符串' 300',所以前面有一个空格。 扫描程序无法将其转换为double。

这应该指出你已经朝着正确的方向发展了。

答案 1 :(得分:0)

您可以按空格重新熟悉第二个令牌

 FileInputStream stream = new FileInputStream("src/transactions.txt");
        fileIn = new Scanner(stream);
        fileIn.useDelimiter(",");
        name = fileIn.next();
        System.out.println("Customer Name: " + name);
        Scanner s = new Scanner(fileIn.next());
        s.useDelimiter(" ");
        balance = s.nextDouble();
        System.out.printf("Checking balance before transaction: %.2f %n", balance);
        System.out.println("Action: "+s.next());
        System.out.println("Transaction amount: "+s.nextDouble());
        fileIn.reset();