2012-04-22 2 views
0

У меня проблемы с чтением в текстовом файле с помощью java. Текстовый файл имеет следующий формат:Проблема с сканером Java

String 
String 
String 
String 

Int 
Int 
Int 
Int 

С каждой строкой и Int значением, имеющим символ новой строки в конце и пустая строку в между укусами и Интсом. Я хочу сохранить каждое строковое значение в массив строк, но я не могу понять, как заставить сканер остановиться на пустой строке. Я пробовал различные методы, например, до тех пор, пока не будет int, пока значение hasNext не будет "", и попытаться просто прочитать строки, но ничего не работает. Может кто-нибудь предоставить anyhelp?

+5

Почему вы не просто прочитать построчно? – Tudor

+4

покажите нам код, который у вас есть. Также было бы легче читать все строки, а затем игнорировать те, которые вы не хотите. – twain249

+0

Пожалуйста, напишите, что вы пробовали, чтобы мы могли его исправить. –

ответ

3

Не уверен, что из вашего примера, если у вас есть ровно 4 String сек и 4 Integer сек или более, так что-то вроде следующего должно работать:

List<String> strings = new ArrayList<String>(); 
List<Integer> ints = new ArrayList<Integer>(); 

while(scanner.hasNext() && !scanner.hasNextInt()) { 
    strings.add(scanner.next()); 
} 
while(scanner.hasNextInt()) { // If you also want to store the ints 
    ints.add(scanner.nextInt()); 
} 
+0

У меня тоже нет точного числа, я просто использовал 4 для примера –

+0

Хорошо, но это должно работать в любом случае :) –

+0

Обратите внимание, что это решение добавляет новый элемент в список строк для каждого слова, а не в строке ('foo bar' в одной строке добавит два элемента в список) и что он не работает, если один из строки могут быть проанализированы как целое число (например, если строка строки «5 яблок», произойдет исключение). – siegi

0
while (mScanner.hasNextLine()){ 
    String line = mScanner.nextLine(); 
    if (line.length() == 0) 
     break; 
    else 
     mArrayList.add(line);//do stuff 
} 
+0

Это казалось немного лучше, но когда я добавляю значения в arraylist, он добавил только первое значение –

0
public static void main (String [] args) 
{ 
    Scanner sc = new Scanner (System.in); 
    int count = 0; 
    while (sc.hasNext()) 
    { 
     String s = sc.next(); 
     ++count; 
     System.out.println (count + ": " + s); 
     if (count == 4) 
      break; 
    } 
    while (sc.hasNext()) 
    { 
     int i = sc.nextInt(); 
     System.out.println (count + ": " + i); 
    } 
} 

кошка Дат

Foo 

Bar 

Foobar 

Baz 

1 

2 

4 

8 

Тест: кошка Дат | Java ScanIt

1: Foo 
2: Bar 
3: Foobar 
4: Baz 
4: 1 
4: 2 
4: 4 
4: 8 

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

Таким образом, программа должна работать и на вас.

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