Java 重新定义扫描仪';s不是一个数字识别?

Java 重新定义扫描仪';s不是一个数字识别?,java,double,java.util.scanner,nan,Java,Double,Java.util.scanner,Nan,在Java中,类Java.util.Scanner提供了一种解析长字符串的方便方法。在我的特殊情况下,我必须解析具有许多double值的字符串,为此我使用nextDouble()方法 有时,我的输入字符串包含nan,而不是有效的浮点数。不幸的是,Scanner似乎只能识别非数字的NaN 有没有办法教它也识别nan?可能通过使用DecimalFormatSymbols.setNaN()?设置自定义区域设置,一个选项是设置自定义区域设置。另一种选择是,扫描程序在内部使用正则表达式检索双字符串,然后使

在Java中,类
Java.util.Scanner
提供了一种解析长字符串的方便方法。在我的特殊情况下,我必须解析具有许多
double
值的字符串,为此我使用
nextDouble()
方法

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


有没有办法教它也识别nan?可能通过使用
DecimalFormatSymbols.setNaN()

设置自定义
区域设置
,一个选项是设置自定义
区域设置
。另一种选择是,扫描程序在内部使用正则表达式检索双字符串,然后使用
double.parseDouble
将其转换为
double
,因此您可以使用正则表达式调用
scanner#next(模式)
,除了使用“nan”而不是“nan”然后对返回的字符串调用
Double.parseDouble

类似的方法如何

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

你为什么不直接用字符串替换输入中的所有内容,搜索nan并将它们切换到nan,因为这是一个很长的字符串,这意味着要解析整个字符串,谢谢你的帮助,因为我一直认为这太复杂了。这个解决方案很简单,据我所知,不会对性能产生巨大影响。