Проблема со сканером Java

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

String
String
String
String

Int 
Int
Int 
Int

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


person Ryan Sayles    schedule 22.04.2012    source источник
comment
Почему бы тебе просто не прочитать строчку за строчкой?   -  person Tudor    schedule 22.04.2012
comment
покажите нам код, который у вас есть до сих пор. Также, вероятно, было бы проще прочитать все строки, а затем игнорировать те, которые вам не нужны.   -  person twain249    schedule 22.04.2012
comment
Пожалуйста, напишите, что вы пробовали, чтобы мы могли это исправить.   -  person Martin James    schedule 22.04.2012
comment
Я пробовал разные методы К сожалению, «сбросить формулировку проблемы на сайт вопросов и ответов, в отчаянии поднять руки и надеяться, что кто-то сделает это за вас» — редко удается.   -  person Andrew Thompson    schedule 22.04.2012
comment
Я пробовал разные методы, могу ли я их показать?   -  person Parth Soni    schedule 22.04.2012
comment
Прошу прощения, это была моя первая попытка: Scanner sc = new Scanner(sf); в то время как (sc.Next() != ){ citys.add(sc.next()); } города - это имя моего массива   -  person Ryan Sayles    schedule 22.04.2012
comment
Я также пробовал while(!sc.hasNextInt())   -  person Ryan Sayles    schedule 22.04.2012
comment
@ rsay3: не пытайтесь публиковать код в комментариях, так как он не отформатирован и нечитаем. Вместо этого отредактируйте свой исходный пост и покажите там свой код. Вы уже задавали вопросы здесь раньше, поэтому вы уже должны знать, что нужно показать свою попытку кода, когда вы впервые пишете свой вопрос. Мы не должны просить об этом.   -  person Hovercraft Full Of Eels    schedule 22.04.2012


Ответы (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());
}
person Jean Logeart    schedule 22.04.2012
comment
У меня тоже нет точного числа, я просто использовал 4 для примера - person Ryan Sayles; 22.04.2012
comment
Обратите внимание, что это решение добавляет новый элемент в список strings для каждого слова, а не для каждой строки (foo bar в одной строке добавит два элемента в список) и что оно не работает, если одна из строк может быть проанализирована как целое число ( например, если строковая строка равна 5 apples, возникнет исключение). - person siegi; 22.04.2012
comment
Спасибо! Строки работают, а целые нет. мой файл на самом деле имеет строки целых чисел, и каждая строка сама содержит 3 целых числа, разделенных табуляцией. Будет ли это причиной того, что это не работает для целых чисел? - person Ryan Sayles; 22.04.2012

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

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

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

person user unknown    schedule 22.04.2012

person    schedule
comment
Казалось, это работает немного лучше, но когда я добавляю значения в массив, он добавляет только первое значение. - person Ryan Sayles; 22.04.2012