所以我们有了这个程序,我们必须在其中将文本文件中的双精度值读取到双精度ArrayList中并进行某些计算。
文本文件示例:
注意:日期和双精度值之间有空格
5/05/1998 4.4
1/01/1999 -4.123
问题是我得到的信息如下:
“输入字符串的NumberFormatException:1/2/1950 0.0258”错误。
这是我的代码:
public static void value() throws java.io.IOException{
try{
BufferedReader br = new BufferedReader(new FileReader(new File("SP500-Weekly.txt")));
ArrayList<Double>list = new ArrayList<Double>();
String line;
while((line=br.readLine())!=null){
String[] r = line.split(" ");
for(int i=0; i<r.length; i++){
double val = Double.parseDouble(r[i]);
list.add(val);
}
}br.close();
System.out.println(list.size());
}
catch(IOException io){
System.out.println("error");
}
}
答案 0 :(得分:1)
似乎您只需要在每行上显示double
值,然后将其添加到List<Double>
中即可。根据您的输入,第二个值始终是您的双精度值,但您也尝试解析第一个值,即日期,Double.parseDouble()
无法解析日期为/
的字符,因此,您遇到了异常。如果您需要double值,则只需执行以下操作即可:
try {
BufferedReader br = new BufferedReader( new FileReader( new File( "SP500-Weekly.txt"" ) ) );
List<Double> list = new ArrayList<Double>();
String line;
while ( ( line = br.readLine( ) ) != null ) {
String[] r = line.split( "\\s+" );
list.add( Double.parseDouble( r[ 1 ] ) );
}
br.close( );
System.out.println( list.size( ) );
} catch ( IOException io ) {
e.printStackTrace( );
}
然后,您可以根据需要使用list
变量。
此外,如果您想更具体一点,并检查第二个值是否实际上是数字/双精度数,那么我将按照以下步骤添加一个正则表达式,以确保第二个值是数字(带或不带{{1} }符号),如下所示:
-
答案 1 :(得分:1)
使用java.nio
和纯Java 8对此进行非常简单和最新的实现。
private static List<Double> readDoubles(final String fileName) {
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
return stream.map(s -> s.split("\\s+")[1])
.map(Double::parseDouble)
.collect(Collectors.toList());
} catch (IOException e) {
e.printStackTrace();
}
return Collections.emptyList();
}
实施还需要使用try-with-resources
自动管理各种资源。
答案 2 :(得分:0)
正确的代码:
import java.util.List;
class Sample extends SimulateMarket{
public static void value(){
try{
BufferedReader br = new BufferedReader(new FileReader(new File("SP500-Weekly.txt")));
List<Double> list = new ArrayList<Double>();
String line;
while((line=br.readLine())!=null){
String[] r = line.split("\\s+");
list.add(Double.parseDouble(r[1]));
}br.close();
Random rand = new Random();
int randomIndex = rand.nextInt(list.size());
System.out.println(list.get(randomIndex));
}
catch(IOException io){
System.out.println("error");
}
}
}