使用Java完成我的第一步,这是我的问题:
1。)rawData.txt
可以读取:
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import static java.lang.System.out;
class ReadAndWrite {
public static void main(String args[])
throws FileNotFoundException {
Scanner diskScanner = new Scanner(new File("rawData.txt"));
String diskString;
diskString = diskScanner.nextLine();
out.println(diskString);
diskScanner.close();
}
}
eclipse控制台的结果是:
>19.5 5
所以我想可以阅读内容。
但是:nextDouble()
和nextInt()
无效:
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
class ReadAndWrite {
public static void main(String args[])
throws FileNotFoundException {
Scanner diskScanner = new Scanner(new File("rawData.txt"));
double unitPrice, quantity;
unitPrice = diskScanner.nextDouble();
quantity = diskScanner.nextInt();
[...]
diskScanner.close();
}
}
来自控制台的错误消息是:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextDouble(Scanner.java:2413)
at ReadAndWrite.main(ReadAndWrite.java:16)
那么我该怎么做才能理解这个问题呢?
答案 0 :(得分:3)
我刚刚在我的机器上进行了测试,但我发现了问题。预期double
格式取决于Locale
。在某些国家/地区,小数位数用,
分隔,有些用.
分隔。
Scanner diskScanner = new Scanner(new File("rawData.txt")).useLocale(Locale.ENGLISH);
将解决问题。否则,请从
更改您的文件19.5 5
到
19,5 5
答案 1 :(得分:0)
关于异常的javadoc:
由扫描程序抛出,表示检索到的令牌没有 匹配预期类型的模式,或者令牌不在 预期类型的范围。
如果您非常确定要读取的数据类型,则可以使用特定方法。否则转到.next()
方法。返回String
如果要对值进行计算,可以使用Double.valueOf("5.2")
或Integer.valueOf("5")
等解析器解析字符串,并处理try catch块中的解析异常。