【发布时间】:2012-03-10 15:52:33
【问题描述】:
我正在尝试使用BufferedReader 类的readLine() 方法从文本文件中读取长类型,然后我使用StringTokenizer 解析第一个令牌(长类型编号),但我面临异常错误为java.lang.NumberFormatException
这是我的文本文件的示例;
2764841629 Quaroten Ilen
1398844030 Orden Nenama
1185252727 Inja Nenaptin
2370429126 Quaren Inaja
1502141743 Otin Una
1993687334 Quarwennaja Nenoten
1015934104 Polen Meritna
2363674760 Otja Ie
1904629749 Neninin Ordja
3047965620 Algnaja Nenja
这是我从文本文件中读取的代码并将长值赋给我的长变量
private void registerData() throws FileNotFoundException{
try {
String regPatName;
String regPatSurname;
long regPatID;
FileInputStream fis = new FileInputStream("src\\assignment_3\\injuredPersonList.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
String line;
while( ( line = reader.readLine() ) != null) {
StringTokenizer st = new StringTokenizer(line, " ");
while(st.hasMoreTokens()){
regPatID = Long.parseLong(st.nextToken());
regPatName = st.nextToken();
regPatSurname = st.nextToken();
Patient regPatient = new Patient(regPatName, regPatSurname, regPatID);
hashMethod(regPatient);
}
}
} catch (IOException ex) {
Logger.getLogger(personTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void hashMethod(Patient regPatient){
Long idPat = new Long(regPatient.getPatientID());
int keyID;
keyID = (int) Math.sqrt(Integer.parseInt(idPat.toString().substring(0, 5) + idPat.toString().substring(5, 10))) % (50000);
System.out.println(keyID);
}
最后这是我面临的错误;
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "2481765933 Otna"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Long.parseLong(Long.java:419)
at java.lang.Long.parseLong(Long.java:468)
at assignment_3.personTest.registerData(personTest.java:58)
at assignment_3.personTest.<init>(personTest.java:33)
at assignment_3.personTest$1.run(personTest.java:161)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:611)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
如果您能帮助我,我将不胜感激,也谢谢您。
【问题讨论】:
-
请发布您获得的整个堆栈跟踪。此外,提供示例文本文件可能是个好主意。
-
好的,我会立即编辑我的帖子
-
您的输入文件选项卡不是被任何机会分开了吗?制表符 != 空格字符。尝试在不指定分隔符的情况下初始化您的字符串标记器。 (默认为所有空格。)
-
确保将正确的字段传递给 Long.parseLong()。 System.out.println(st.nextToken())
-
@biziclop 感谢您的建议,但现在它给出了 java.lang.NumberFormatException: For input string: "2481765933"
标签: java long-integer stringtokenizer numberformatexception