2015-03-10 2 views
0

У меня есть файл с контентом, как это:useDelimiter пока петля не перекручивание правильно

123.412

345.634

124.645

Я хочу, чтобы получить только номера перед тем, запятыми в каждой строке и добавьте их в мой список массива. Почему мой код только правильно добавляет первое число (123), но не продолжает добавлять остальные?

try { 
      File input = new File(filename); 
      in = new Scanner(input); 
      in.useDelimiter(","); 

      while(in.hasNextLine()) { 
       someArrayList.add(Integer.parseInt(in.next())); 
      } 
+0

@AlexandreLavoie: они уже используют '.next()', что и предписывает дубликат. – Makoto

ответ

0

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

Scanner input = new Scanner(new File(filename)); 
while(input.hasNextLine()) { 
    String firstThreeDigits = input.nextLine().split(",")[0] 
    someArrayList.add(Integer.parseInt(firstThreeDigits)); 
} 
+0

Это работает! Не могли бы вы сказать мне, почему после раскола есть [0]? Также, как бы вы сделали это для чисел после запятой? – AlldaRage

+0

'split' возвращает массив строк. '[0]' - первый элемент. Если вам нужен второй элемент, вам нужно будет сохранить строку во временной строке, затем разделить ее и индексировать ее с помощью '[1]'. – Makoto

0

Есть 2 ошибки здесь:

  • in.hasNextLine() - Это проверка, чтобы увидеть, если есть еще одна линия на входе этого сканера
  • in.useDelimiter(","); - Используя этот ограничитель будет работать только с запятыми если вы постоянно звоните

Предполагая, что ваш входной файл является строковым, вы можете изменить оба вышеуказанных значения:

File input = new File(filename); 
in = new Scanner(input); 
in.useDelimiter(",|\n"); 

while (in.hasNext()) { 
    someArrayList.add(Integer.parseInt(in.next())); 
} 

Я думаю, что лучше было бы просто использовать readLine, а затем String.split полученную линию.

+0

, когда я пытаюсь это сделать, я получаю: java.lang.NumberFormatException: для строки ввода: «412 ». После 412 появляется новая строка, последняя кавычка находится на следующей строке. – AlldaRage

+0

@AlldaRage вы можете изменить его как '\\ s +' вместо '\ n' или вызывать' String # trim() 'для каждого значения из' next() '. – Obicere

+0

@Obicere спасибо, он работает с \\ s +. – AlldaRage

0

Здесь я использую nextLine потреблять линию, а затем разделив с использованием регулярных выражений ,

try { 
     File input = new File(filename); 
     in = new Scanner(input); 
     while(in.hasNextLine()) { 
     someArrayList.add(
     Integer.parseInt(in.nextLine().split(",")[0].replace("\\s+", ""))); 
    } 

Возьмите линии, разделенное с помощью «» и получить первый элемент, и заменить все белое пространство ни с чем

Смежные вопросы