重新定义扫描仪的非数字识别?

时间:2013-04-14 19:32:47

标签: java double java.util.scanner nan

在Java中,类java.util.Scanner提供了一种解析长字符串的便捷方法。在我的特定情况下,我必须解析一个包含许多double值的字符串,我使用nextDouble()方法。

有时,我的输入字符串包含nan而不是有效的浮点数。不幸的是,Scanner似乎只识别NaN非数字。

有没有办法教它识别nan?也许可以使用Locale设置自定义DecimalFormatSymbols.setNaN()

2 个答案:

答案 0 :(得分:1)

一种选择是设置自定义Locale。另一个选项是扫描程序在内部使用正则表达式检索双字符串,然后使用Double.parseDouble将其转换为double,这样您就可以使用正则表达式Scanner#next(Pattern pattern)调用Double.parseDouble {3}}除了使用“nan”而不是“NaN”,然后在返回的字符串上调用{{1}}。

答案 1 :(得分:1)

这样的事情怎么样?

private static final Pattern nan =
        Pattern.compile("nan", Pattern.CASE_INSENSITIVE);
public static boolean hasNextDouble(Scanner scanner) {
    if(scanner == null)
        return false;
    return scanner.hasNext(nan) || scanner.hasNextDouble();
}
public static double nextDouble(Scanner scanner) {
    if(scanner.hasNext(nan)) {
        scanner.next();
        return Double.NaN;
    }
    return scanner.nextDouble();
}