Странное NumberFormatException, которое не должно появиться?
Привет всем хорошо у меня есть этот код:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ItemIdReader {
public int id;
public ItemIdReader(){
try {
BufferedReader br = new BufferedReader(new FileReader("itemList.txt"));
String line = br.readLine();
while (true) {
if (line == null)
break;
String[] split = line.split(" - ", 2);
String itemName = split[1];
id= Integer.parseInt(split[0]);
}
} catch (IOException i ) {
i.printStackTrace();
}
}
public int getId() {
return id;
}
}
и когда я пытаюсь вывести идентификатор, я получаю эту ошибку:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "1"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at ItemIdReader.<init>(ItemIdReader.java:19)
at Launcher$UI.lambda$new$0(Launcher.java:25)
at Launcher$UI$$Lambda$1/455659002.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
вот файл.txt, из которого я читаю:
1 - Toolkit
и вот печать:
ItemIdReader newF= new ItemIdReader();
System.out.println(newF.getId());
Как вы можете видеть, я уже сделал значение id целым числом, однако я все еще получаю, что он говорит, что это строка, когда я пытаюсь вывести его, спасибо.
4 ответа
Прежде всего, если бы у вас не было этого исключения, у вас был бы бесконечный цикл.
Я предполагаю, что у вас есть скрытый персонаж, вероятно, спецификация, в начале вашего файла. Подтвердите это, сбросив каждый символ в виде целого числа, и, если оно подтверждено, затем снова откройте ваш файл в редакторе и сохраните его без спецификации.
for (char c : split[0].toCharArray()) {
System.out.println((int) c);
}
Если вы переместите readln внутри цикла, он будет работать нормально
while (true) {
String line = br.readLine();
if (line == null)
break;
String[] split = line.split(" - ", 2);
String itemName = split[1];
id= Integer.parseInt(split[0]);
}
Это бесконечный цикл! Вы должны прочитать строку снова в то время как. Этот код похож на то, что вы хотите сделать, и он работает для меня:
public class Test {
public static void main(String[] a) throws IOException{
BufferedReader br = new BufferedReader(new FileReader("itemList.txt"));
String line = br.readLine();
while (true) {
if (line == null)
break;
String[] split = line.split(" - ", 2);
String itemName = split[1];
int id= Integer.parseInt(split[0]);
System.out.println(id);
line = br.readLine();
}
}
}
JB Nizet прав. Действительно, есть Байтовый Порядок, он скопирован в ваше сообщение об ошибке.
Вы можете прочитать ваш файл, используя BOMInputStream, чтобы избежать этого.