如何解决为什么解析第一个字符串数组中的数据时会引发异常,而跳过第一个数组却不会引发异常?
在我的系统中,我有一个Excel阅读器,它也可以读取csv文件。
这是我读取csv文件的方式:
Path path = Paths.get(this.getFilePath());
CSVParser parser = new CSVParserBuilder().withSeparator(';').build();
try(BufferedReader br = Files.newBufferedReader(path,StandardCharsets.UTF_8);
CSVReader reader = new CSVReaderBuilder(br).withCSVParser(parser).build()) {
rows = reader.readAll();
这有效。 csv文件中的数据存储在字符串数组列表中。
现在,当从列表中读取我不理解的数据时,我注意到了一些东西。
这是我从列表中读取数据的方式:
if (rows != null && rows.size() > 1) {
for (String[] row : rows) {
int i = Integer.parseInt(row[0]);
String name = row[1];
double d = Double.parseDouble(row[2].replace(",","."));
}
}
如果从列表中获取第一个数组,并且将数组中的第一个字符串从String解析为int,则 java.lang.NumberFormatException:对于输入字符串:抛出“ 27” 。 / p>
但是如果跳过了第一个数组(第一行excel行):
if (rows != null && rows.size() > 1) {
for (int i = 1; i < rows.size(); i++) { //i = 1,skipp first array(excel line)
String[] row = rows.get(i);
int i = Integer.parseInt(row[0]);
String name = row[1];
double d = Double.parseDouble(row[2].replace(","."));
}
}
这样,不会引发java.lang.NumberFormatException:对于输入字符串:会被抛出。
我不明白,如果不跳过第一个数组(excel行),为什么会引发java.lang.NumberFormatException。
excel文件的第一行是必需的,不应跳过。它可以与读取excel文件有关吗?与读者一起使用吗?
有人知道这个问题吗?有人可以帮助我吗?
解决方法
出现这些错误,因为您的电话号码前有空白。您可以在解析数字之前使用trim
。这些应该删除空白和解析错误。
if (rows != null && rows.size() > 1) {
for (int i = 1; i < rows.size(); i++) { //i = 1,skipp first array(excel line)
String[] row = rows.get(i);
int i = Integer.parseInt(row[0].trim());
String name = row[1];
double d = Double.parseDouble(row[2].replace(",","."));
}
}
您也可以尝试:
Integer.parseInt(row[0].replaceAll("\\D+",""));
这将从字符串中删除allnon数字。
,它要解析的字符串的前导空格为“ 27”。这就是导致错误的原因。以下代码也会引发异常:
public class MyClass {
public static void main(String args[]) {
int i = Integer.parseInt(" 27");
System.out.println(i);
}
}
一般而言,您应该在解析输入之前对输入进行清理。例如,如果它将是一个数字值,请先trim()
个字符串,然后再将其提供给parseInt()
。
您的解析不充分。您收到的错误表明一个单元格包含一个带前导空格的数字。
java.lang.NumberFormatException:对于输入字符串:“ 27”
您在此单元格值上调用Integer.parseInt()。根据其文档,parseInt()拒绝前导空格。
在调用parseInt之前,您需要修整该值。参见String.trim()。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。