NumberFormatException parseInt Java
我试图将文本文件中的数据(点:x,y)区分并存储在两个数组列表中:节点和零。数据文件只包含整数或十进制值NumberFormatException parseInt Java,java,parseint,numberformatexception,Java,Parseint,Numberformatexception,我试图将文本文件中的数据(点:x,y)区分并存储在两个数组列表中:节点和零。数据文件只包含整数或十进制值 Data File: x y type(zero/knot) 46 10 2 13 5 2 27 21 1 但是我的代码抛出NumberFormatException:48 import java.util.*; import java.util.ArrayList; import java.io.*; import java.awt.Poi
Data File:
x y type(zero/knot)
46 10 2
13 5 2
27 21 1
但是我的代码抛出NumberFormatException:48
import java.util.*;
import java.util.ArrayList;
import java.io.*;
import java.awt.Point;
public class program {
public static void main(String []args) {
ArrayList knots = new ArrayList<Point>();
ArrayList zeros = new ArrayList<Point>();
List<Integer> list = new ArrayList<Integer>();
String line = null;
String file = "data1.txt";
BufferedReader reader;
try {
reader = new BufferedReader(new FileReader(file));
while((line = reader.readLine()) != null) {
String tmp[] = line.split(" ");
System.out.println(line);
for (String s:tmp) {
s = s.replace("\r\n","");
int i = Integer.parseInt(s.trim());
//knots.add(new Point();
System.out.println(s);
}
}
}
catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.util.*;
导入java.util.ArrayList;
导入java.io.*;
导入java.awt.Point;
公共课程{
公共静态void main(字符串[]args){
ArrayList节点=新的ArrayList();
ArrayList zeros=新的ArrayList();
列表=新的ArrayList();
字符串行=null;
String file=“data1.txt”;
缓冲读取器;
试一试{
reader=newbufferedreader(newfilereader(file));
而((line=reader.readLine())!=null){
字符串tmp[]=line.split(“”);
系统输出打印项次(行);
for(字符串s:tmp){
s=s.replace(“\r\n”,”);
inti=Integer.parseInt(s.trim());
//添加(新点();
系统输出打印项次;
}
}
}
catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
您说过您也在解析十进制数。这些数字不能用整数.parseInt()
解析。您需要使用Double.parseDouble()
或Float.parseFloat()
来解析字符串中的十进制值
此外,您似乎正在尝试解析文件中的头。请确保在开始读取数据之前执行令牌
readLine()
调用,否则您将尝试解析文本,这毫无意义,并且将崩溃。假设文件内容正是
46 10 2
13 5 2
27 21 1
当我运行你的代码,我得到的输出
46 10 2
46
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:504)
at java.lang.Integer.parseInt(Integer.java:527)
at testparser.TestParser.main(TestParser.java:47)
这似乎表明输出中存在空白/空字符串
46 10 2
46
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:504)
at java.lang.Integer.parseInt(Integer.java:527)
at testparser.TestParser.main(TestParser.java:47)
如果我替换这个部分
for (String s : tmp) {
s = s.replace("\r\n", "");
int i = Integer.parseInt(s.trim());
//knots.add(new Point();
System.out.println(s);
}
与
for (String s : tmp) {
s = s.trim();
if (s.length() > 0) {
int i = Integer.parseInt(s.trim());
//knots.add(new Point();
System.out.println(s);
}
}
我得到
46 10 2
46
10
2
13 5 2
13
5
2
27 21 1
27
21
1
不要忘记,readline
不会返回行终止符,因此您应该可以忽略它
line.split(“”
在每个“单独”的空格上进行拆分,这意味着如果您有多个空格字符在一起,那么它将返回第二个空格…;)
如果改为使用
String tmp[]=line.split(\\s+)如果(s.length()>0){
check redundant),它将在所有其他字符之间的任何空格上拆分…不返回任何“空白”String
s(使if(s.length()>0){
check redundant)问题出在拆分行中。它应该是这样的String a[]=s.split(+)
您的情况是:当它用
拆分“46 10 2”字符串时,
只计算拆分字符串的一个空格。因此,它忽略46
和10
之后的一个空格,然后查找字符串。但一个空格之后没有字符串,因此需要“”
作为字符串,并尝试用整数解析它。虽然“
无法解析为整数,但它会引发NumberFormatException您可以试试这段代码。它对我来说很好
import java.util.ArrayList;
import java.io.*;
import java.awt.Point;
public class program
{
public static void main(String []args)
{
ArrayList knots = new ArrayList<Point>();
ArrayList zeros = new ArrayList<Point>();
List<Integer> list = new ArrayList<Integer>();
String line = null;
String file = "data1.txt";
BufferedReader reader;
try
{
reader = new BufferedReader(new FileReader(file));
while((line = reader.readLine()) != null)
{
String tmp[] = line.split(" ");
System.out.println(line);
for (String s:tmp)
{
if(! (s.isEmpty()) )
{
int i = Integer.parseInt(s.trim());
System.out.println(s);
}
}
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
import java.util.ArrayList;
导入java.io.*;
导入java.awt.Point;
公共课程
{
公共静态void main(字符串[]args)
{
ArrayList节点=新的ArrayList();
ArrayList zeros=新的ArrayList();
列表=新的ArrayList();
字符串行=null;
String file=“data1.txt”;
缓冲读取器;
尝试
{
reader=newbufferedreader(newfilereader(file));
而((line=reader.readLine())!=null)
{
字符串tmp[]=line.split(“”);
系统输出打印项次(行);
for(字符串s:tmp)
{
如果(!(s.isEmpty())
{
inti=Integer.parseInt(s.trim());
系统输出打印项次;
}
}
}
}
catch(filenotfounde异常)
{
e、 printStackTrace();
}
捕获(IOE异常)
{
e、 printStackTrace();
}
}
}
我希望这会对您有所帮助。这可能是由于您的文件头行吗?因此,“x y类型(零/结)”行实际上不在文件中?您正在尝试查找字符串是的,“x y类型”现在不在文件中,我只是想做整数值,我有两个独立的数据文件。那么我第二段中的建议可能适用,但在阅读另一个文件时,了解如何解析浮点值是很重要的。“x y type”仅用于说明,它不在实际文件中。@user2398101很高兴我能提供帮助