2015-09-12 4 views
1

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

Если я инициализировать сканер из следующего текстового файла ...

x1 2 3 -1 x2 2 x3 4 x4 5 -1 

Я использую следующий код:

String name; 
int value; 
ArrayList<Integer> tempList = new ArrayList<Integer>(); 

while(scanner.hasNext()) { 
    name = scanner.next(); 
    //Over here, I'm trying to assign value to be 2 and 4 (only for x2 and x3),  not 2, 3, or 5 because it's followed by a -1 
    value = 2 and 4 
    tempList.add(value); 
} 

Так что в моей итерации, если имя сопровождается номером/несколько номеров, которые заканчиваются на -1, ничего не делать, но если за именем следует номер, то установите значение = номер

Будет ли это потребовать несколько проходов через файл, чтобы узнать, какие строки заканчиваются -1 номер?

+0

@ maytham-ɯɐɥıλɐɯ Я хочу, чтобы установить value = 2 и 4, потому что список целых чисел, следующих за строкой, не заканчивается -1. В конце концов я добавлю его в arraylist, но на данный момент просто заданное значение = 2 и 4. – Steveo90

+0

@ maytham-ɯɐɥıλɐɯ да, потому что за ним следует только 1 номер и не заканчивается на -1, я его отредактировал сделайте это более ясным – Steveo90

+0

@ maytham-ɯɐɥıλɐɯ спасибо. – Steveo90

ответ

1

Вот один из способов сделать это

String s = " x1 2 3 -1 x2 2 x3 4 x4 5 -1 lastone 4"; 

    Scanner sc = new Scanner(s); 

    String currentName = null; 
    int currentNumber = -1; 

    while (sc.hasNext()) { 

     String token = sc.next(); 

     if (token.matches("-?\\d+")) { 
      currentNumber = Integer.parseInt(token); 
     } else { 
      if (currentName != null && currentNumber > -1) { 
       System.out.println(currentName + " = " + currentNumber); 
      } 
      currentName = token; 
      currentNumber = -1; 
     } 
    } 

    if (currentName != null && currentNumber > -1) { 
     System.out.println(currentName + " = " + currentNumber); 
    } 

Выход:

x2 = 2 
x3 = 4 
lastone = 4 

EDIT: коррекция (печать последней пары если таковой имеется)

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