Попытка разобрать строку в int из файла.Get NumberFormatException: Для входной строки: "", строка eaven tho представляется хорошей строкой int.Джава - PullRequest
0 голосов
/ 12 марта 2012

Я пытаюсь понять это уже пару часов, и я надеюсь, что один из вас сможет мне помочь.У меня есть файл (на самом деле два, но это не важно), в котором есть несколько строк и столбцов с числами и пробелами между ними.И я пытаюсь прочитать те с BufferedReader.И это прекрасно работает.Я могу распечатать строки и символы, как я хочу.Но когда я пытаюсь проанализировать эти строки и символы, я получаю следующую ошибку:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at FileProcess.processed(FileProcess.java:30)
at DecisionTree.main(DecisionTree.java:16)

Из того, что я нашел с помощью Google, я думаю, что ошибка заключается в том, как я читаю мой файл.

public class ReadFiles {
private BufferedReader read;
public ReadFiles(BufferedReader startRead) {
    read = startRead; 
}

public String readFiles() throws IOException {
    try {
        String readLine = read.readLine().trim();
        String readStuff = "";
        while(readLine != null) {
            readStuff += (readLine + "\n");
            readLine = read.readLine();
        }
            return readStuff;
    }
    catch(NumberFormatException e) {
        return null;
    }
}

И для разборного бита

public class FileProcess {

public String processed() throws IOException {
fileSelect fs = new fileSelect();
ReadFiles tr = new ReadFiles(fs.traning());
String training = tr.readFiles();   

ReadFiles ts = new ReadFiles(fs.test());
String test = ts.readFiles();
List liste = new List(14,test.length());

String[] test2 = test.split("\n");

for(int i = 0; i<test2[0].length(); i++) {      
    char tmp = test.charAt(i);
    String S = Character.toString(tmp).trim();

    //int i1 = Integer.parseInt(S);

    System.out.print(S);        
}

Это не настоящий код для того, что я планирую делать с выводом, но ошибка появляется в закомментированном коде.Таким образом, мой вывод строки выглядит следующим образом:

12112211

Что кажется хорошим для анализа в целое число.Но это не работает.Я пытался вручную увидеть, что находится в положении char 0 и 1, для 0 я получаю 1, но для 1 я ничего не получаю "".Так как я могу удалить ""?Я надеюсь, что вы, ребята, можете мне помочь, и дайте мне знать, если вам нужно больше информации.Но я думаю, что покрыл то, что нужно.

Заранее спасибо:)

Да, и еще одна вещь: если я заменю "" на "0", это работает, но затем я получаю все те нули, которые я не могу найтиумный способ удалить.Но возможно ли пропустить их при разборе или что-то в этом роде?Мои файлы содержат только 1 и 2, поэтому это не помешает ничему, если это возможно.

Ответы [ 2 ]

0 голосов
/ 12 марта 2012

Вы можете использовать класс Scanner для анализа целых, пропуская пробелы:

sc = new java.util.Scanner (line);
sc.nextInt ();

Другая идея состоит в том, чтобы обрезать линию, разбить и разобрать части:

lin = line.trim ();
String [] words = lin.split (" +");
for (String si : words) 
    Integer.parseInt (si);
0 голосов
/ 12 марта 2012

Строка "" будет возвращена, если у вас есть 2 символа разделения рядом друг с другом (т. Е. \ N \ n) или если в вызове trim () передается символ пробела, поэтому игнорируйте пустые строки и переносите на.

...