2015-04-26 3 views
1

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

car,house,548544587,645871266 

У меня есть что-то вроде кода ниже:

String [] tokens = line.split(","); 
try { 
     line = line.trim(); 
     int a = Integer.parseInt(tokens[2]); 
     int b = Integer.parseInt(tokens[3]); 
     int c = (b - a); 
     System.out.println(c); 
     } catch (NumberFormatException e) { 
        System.out.println(e); 
      } 

Но это терпит неудачу с ошибками, как это, для каждой строки я прочитал в :

java.lang.NumberFormatException: For input string: "548544587" 
java.lang.NumberFormatException: For input string: "645871266" 

Любая идея, что мне может не хватать?

ответ

5

Вам необходимо удалить цитаты перед расщеплением. Он не может преобразовать "number" в фактическое число из-за котировок.

String line = "\"car\",\"house\",\"548544587\",\"645871266\""; 
String[] tokens = line.replace("\"", "").split(","); 
try { 

    int a = Integer.parseInt(tokens[2]); 
    int b = Integer.parseInt(tokens[3]); 
    int c = (b - a); 
    System.out.println(c); 
} catch (NumberFormatException e) { 
    System.out.println(e); 
} 

Выход:

97326679 
+0

Извините, у меня был пример строки, который я читал. На самом деле он не содержит кавычек в любом месте. Я обновил свой оригинальный пост, чтобы показать это. (Вот почему это превзошло меня ...) – gppanter

+0

@gppanter Я думаю, что это серьезное обновление .. вы попробовали этот 'String [] tokens = line.trim(). Split (", ");'? –

+0

@ gppanter, почему вы не спросили об этом в первую очередь? –

0

Использование String для line не дает ошибку для меня, поэтому он должен быть привязан к тому, что вы читаете из файла. Также обратите внимание, что вы обрезаете линию, но не каждый элемент в tokens. Попробуйте обрезать каждый элемент, например, int a = Integer.parseInt(tokens[2].trim());. Кроме того, вы можете получать символы возврата каретки, такие как \n и/или \r, поэтому попробуйте заменить их до разделения, например, String[] tokens = line.replaceAll("\\n", "").replaceAll("\\r", "").split(",");. Надеюсь это поможет.

+0

Хм, это тоже не помогло ... Я думал, что это будет! Интересно, однако, если я изменил свои строки, чтобы использовать «floats» вместо этого, он работал, поскольку он возвращал целое число. – gppanter

+0

Это очень интересно. Что я буду делать дальше, это проверить каждый символ в токене, что может привести к ошибке. 'char [] aa = токены [2] .trim(). ToCharArray(); для (char c: aa) { System.out.print (c + ""); System.out.println (Integer.parseInt ("" + c)); } ' , но это только то, что я сделал бы. –

0
public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     String line="car,house,548544587,645871266"; 
     String [] tokens = line.split(","); 
     try { 
       line = line.trim();    
       int a = Integer.parseInt(tokens[2].trim()); 
       int b = Integer.parseInt(tokens[3].trim()); 
       System.out.println(a+ " "+b); 
       int c = (b - a); 
       System.out.println(c); 
       } catch (NumberFormatException e) { 
          System.out.println(e); 
        } 

    } 
    Output; 
    548544587 645871266 
    97326679 
Смежные вопросы