在Java中,类java.util.Scanner
提供了一种解析长字符串的便捷方法。在我的特定情况下,我必须解析一个包含许多double
值的字符串,我使用nextDouble()
方法。
有时,我的输入字符串包含nan
而不是有效的浮点数。不幸的是,Scanner
似乎只识别NaN
非数字。
有没有办法教它识别nan
?也许可以使用Locale
设置自定义DecimalFormatSymbols.setNaN()
?
答案 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();
}