2013-02-28 6 views
1

Итак, вот в чем дело, у меня есть этот код:Java String.split() - NumberFormatException

public static void main(String[] args) { 
    try { 
     FileInputStream fstream = new FileInputStream("test.txt"); 
     // Use DataInputStream to read binary NOT text. 
     BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 
     String strLine = br.readLine(); 
     String[] split = strLine.split(" "); 

     System.out.println(Integer.parseInt(split[0])); 
     in.close(); 
    } 
    catch (Exception e) {//Catch exception if any 
     System.err.println("Error: " + e); 
    } 
} 

Допустим, у меня есть файл с именем test.txt , только с " ". Таким образом, он считывает первую строку и разбивает эту строку на две строки. Проблема заключается в том, что можно использовать Integer.parseInt для разделения [1], но не может использовать этот метод для split[0] (System.out.println(split[0]) печатает «»), который выдает мне ошибку:

Error: java.lang.NumberFormatException: For input string: "6" 

UPDATE: Это может быть проблема затмения, потому что если я составляю мои .java файлы в терминале с JAVAC, я не получаю никаких исключений :))

UPDATE2: решена. что-то пошло не так, как с Кейт. Не знаю, что, но gedit работает лучше: D Спасибо всем.

+0

Вы уверены, что у вас нет невидимых символов, как BOM, который может быть первым символом? Распечатайте размер строки. –

+0

ИСТИНА. Длина раскола [0] равна 2, поэтому почему она печатает только «6»? как удалить скрытые символы? – trimpirim

+0

Это, вероятно, спецификация. Откройте файл в хорошем текстовом редакторе (Not Notepad) и настройте его, чтобы сохранить файл без спецификации. –

ответ

0

Попробуйте использовать: hexdump -C test.txt, если у вас есть Linux, вы можете увидеть непечатаемые символы, которые у вас есть.

Также отделка() отвечает, это нормально.

0

Эта проблема в начале файла обычно возникает из-за BOM, который, по сути, имеет некоторое программное обеспечение (в основном, «Блокнот»), чтобы положить в начало Unicode-файлы.

Открыть файл в хорошем текстовом редакторе и настроить его для сохранения файлов без спецификации.

Если вы не можете изменить файл, пропустите первый символ при его чтении.

0

Я хотел бы попробовать следующие, чтобы исключить ложные/недопустимые символы:

.. setup/read code in main method... 
String[] split = strLine.split(" "); 
for (String s : split) { 
     System.out.println(String.format("[%s] => integer? %b", s, isInteger(s))); 
} 
... the rest of the main method.... 


private static boolean isInteger(String n) { 
    try { 
     Integer.parseInt(n); 
    } catch(NumberFormatException e) { 
     return false; 
    } 
    return true; 
} 

Если вы видите что-либо Inbetween квадратных скобок, что Isnt числа, или где целое число? возвращает false, что, вероятно, является проблемой

0

Если вы можете определить фактическую кодировку файла, который вы читаете, вы можете установить его явно, чтобы любые дополнительные байты были правильно преобразованы в символы.

new InputStreamReader(new FileInputStream(...), <encoding>)