Java抛出NumberFormatException
我有一个文本文件,其中前两行是整数Java抛出NumberFormatException,java,string,integer,Java,String,Integer,我有一个文本文件,其中前两行是整数m和n,然后有m行,每行都有n管道分隔值。我编写了一个程序,读取该文件并使用该文件中的值创建m*n数组,它运行了数百万次,然后突然,使用相同的代码,使用相同的文件,在从第一行读取整数时抛出NumberFormatException。整个代码如下: public class Thegame extends JFrame { public Integer st; public Integer el; public String[][] tab
m
和n
,然后有m
行,每行都有n
管道分隔值。我编写了一个程序,读取该文件并使用该文件中的值创建m*n
数组,它运行了数百万次,然后突然,使用相同的代码,使用相同的文件,在从第一行读取整数时抛出NumberFormatException
。整个代码如下:
public class Thegame extends JFrame {
public Integer st;
public Integer el;
public String[][] tab;
public Thegame(String pth)
{
setSize(640,480);
setTitle(pth);
File file = new File(pth);
try
{
BufferedReader rdr = new BufferedReader(new FileReader(file));
st = Integer.valueOf(rdr.readLine());
el = Integer.valueOf(rdr.readLine());
tab = new String[st][el];
for(Integer i=0; i<st; i++)
{
String lin = rdr.readLine();
StringTokenizer spl = new StringTokenizer(lin,"|");
for(Integer j=0; j<el; j++)
{
tab[i][j] = spl.nextToken();
}
}
rdr.close();
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, ex);
}
}
}
public类游戏扩展JFrame{
公共整数街;
公共整数el;
公共字符串[][]选项卡;
公共游戏(字符串pth)
{
设置大小(640480);
setTitle(pth);
文件文件=新文件(pth);
尝试
{
BufferedReader rdr=新的BufferedReader(新文件读取器(文件));
st=整数.valueOf(rdr.readLine());
el=整数.valueOf(rdr.readLine());
tab=新字符串[st][el];
对于(整数i=0;i而言,两条可能的问题线为:
st = Integer.valueOf(rdr.readLine());
el = Integer.valueOf(rdr.readLine());
您需要确保读卡器读取的内容实际上是一个整数
尝试以下小修改:
st = Integer.valueOf(rdr.readLine().trim());
el = Integer.valueOf(rdr.readLine().trim());
如果这不能解决问题,您需要确保捕获的输入正确
为了帮助调试问题,将输入保存到字符串中,并在尝试解析之前将其打印出来以查看其外观可能会有所帮助:
String stStr = rdr.readLine().trim()
System.out.println(stStr);
st = Integer.valueOf(stStr);
System.out.println(stStr);
String elStr = rdr.readLine().trim();
el = Integer.valueOf(elStr);
如果打印的值不是整数,那么您得到的输入不正确。您没有碰巧在文件的第一行之前放置了一些特殊字符,是吗?我知道我曾经遇到过这个问题,我花了很长时间才弄清楚到底发生了什么。我想记事本++会让您看看情况是否如此。一定是什么东西变了,否则就是魔法。可能的嫌疑犯:
- 输入文件的内容已更改。是否使用某种十六进制编辑器进行了检查。文件是否确实以数字开头
- Java/system区域设置已更改。以前被视为数字的内容在新区域设置中不再是数字。区域设置的典型捕获是数千个分隔符(,)
如果行为发生了变化,某些东西确实发生了变化
如果代码没有更改,则:
- 正在读取更改的文件:使用十六进制编辑器查找特殊(不可读)字符。如果您的输入文件没有导致异常,请将其与导致异常的输入文件进行比较(同样,十六进制比较)
- java环境已更改:检查java虚拟机配置中的更改,特别是
更改:
st = Integer.valueOf(rdr.readLine());
el = Integer.valueOf(rdr.readLine());
将来
String input = rdr.readLine();
try {
st = Integer.valueOf( input);
} catch( NumberFormatException e){
System.out.println( "exception reading " + input );
}
input = rdr.readLine();
try {
el = Integer.valueOf(input);
} catch( NumberFormatException e){
System.out.println( "exception reading " + input );
}
您将得到问题字符串输出内容的答案。是什么字符串导致NumberFormatException?是的,您是否愿意发布得到的堆栈跟踪以及异常?还有,您正在读取的文件副本。我确信“没有原因”是一个非常强大的语句…您能对您试图解析的字符串执行一些简单的System.out.println吗?(rdr.readLine()的结果)?您应该像这样定义循环:for(int i=0;i