【发布时间】:2015-07-25 14:45:36
【问题描述】:
我正在处理逗号分隔值文件。我想从每个原始值中提取第一个位置[“0”在数组中的位置]值,并希望对其进行一些数学计算。
csv inputfile is like this
a,b,c,d
12,32,45,76
23,45,77,56
32,34,49,28
73,92,26,68
73,36,77,26
为了获得第一名,它给了我这样的错误
Exception in thread "main" java.lang.NumberFormatException: For input string: ""12"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1268)
at java.lang.Double.parseDouble(Double.java:548)
at rotation.pkg45.Rotation45.main(Rotation45.java:49)//code line no-49
它在第二和第三位置工作正常,但在第四位置它给出与第一位置相同的错误。
package rotation.pkg45;import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.io.FileWriter;
import java.io.*;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.ListIterator;
public class Rotation45 {
public static void main(String[] args)throws IOException {
String filename = "bank-full2.csv";
ArrayList<String> namesList = new ArrayList<String>( );
String[] t1;
// StringBuilder sb;
List<Double> list = new ArrayList<Double>();
File file = new File(filename);
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new FileWriter("bank2test1.csv"));
double a1=0.866025;
double a2=0.5;
double a3=-0.5;
double a4=0.866025;
double b1;
double b2;
double c1;
double c2;
Scanner inputStream = new Scanner(file);
inputStream.next();
Scanner inputStreamm = new Scanner(file);
inputStreamm.next();
while (inputStreamm.hasNext()) { //while loop for find MEAN
String data = inputStreamm.next(); //read each line and store in data
String[] values = data.split(","); //every line splited with " ; " and store each attribute in string list
double first = Double.parseDouble(values[1]);
/* no suchelementexeption */ String data1 = inputStreamm.next(); //read each line and store in data
String[] values1 = data1.split(",");
//inputStream.next();
double second = Double.parseDouble(values1[1]);
c1= ((a2*second)+(a1*first));
c2= ((a3*first)+(a4*second));
values1[2] = String.valueOf(c2);
values[2] = String.valueOf(c1);
StringBuilder sb = new StringBuilder();
// String newData = sb.toString();
for (int i = 0; i<values.length ; i++) {
sb.append(values[i]);
if (i < values.length - 1) {
sb.append(",");
}
}
sb.append("\n");
for (int i = 0; i<values1.length ; i++) {
sb.append(values1[i]);
if (i < values.length - 1) {
sb.append(",");
}
}
// get the new string
// System.out.println(sb.toString());
writer.write(sb.toString()+"\n");
}
writer.close();
inputStreamm.close();
}
catch (FileNotFoundException ex)
{
Logger.getLogger(Rotation45.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
这里只是例如我提取了值[1](表示数组中的第二个位置,如 32、45、34、..)
so result will be..
12,34,45,76
23,46,77,56
32,36,49,28
73,93,26,68
73,38,77,26
此代码适用于值 [1] 和值 [2] 不在值 [0] 和值 [3] 中..为什么我无法理解请帮助我...
【问题讨论】:
-
线程“main”中的异常 java.lang.NumberFormatException: For input string: ""12" 正如您在 csv 文件中看到的那样,在 12 号之前有一个额外的引号
-
@SercanOzdemir 我在操作的 csv 中没有看到任何引用?你能说他们在哪里吗?
-
输入文件(bank-full2)中没有类似“”的引号...
-
当我读取另一个文件时..它给了我类似“线程“main”java.util.NoSuchElementException中的异常”之类的错误,但文件绝对没问题..在它抛出的代码中提到错误。
-
在您的
while循环中,您正在检查inputStreamm.hasNext(),但在循环内您调用inputStreamm.next()两次,这将导致java.util.NoSuchElementException,当最后一行已经被第一个inputStreamm.next()读取时第二个inputStreamm.next()被调用
标签: java file csv filestream filereader