2010-11-21 4 views
0

У меня есть файл с этим конкретным форматом:прочитать файл в определенном формате в ArrayList

 
0 
2 4 
0 1 A 
0 5 B 
1 1 A 
1 3 B 
2 6 A 
2 4 B 
3 6 A 
3 4 B 
4 6 A 
4 4 B 
5 1 A 
5 5 B 
6 6 A 
6 2 B 
  • строка 1 = начальное состояние
  • линия 2 = принимать состояние
  • линии 3 - п = переход таблица
  • 1-й ряд = состояние, в
  • 2-й строке = состояние из
  • А, в = символическую архитектуру монументальной библиотеки л

Как мой FileReader в Java прочитать эти файлы в 5 различных ArrayList с (начальное состояние, конечное состояние государства в, состояние, и символ)?

ответ

1

Вы можете использовать класс Scanner, чтобы прочитать файл (nextLine() is highly recommended). Поскольку вам известны позиции элементов, которые вам нужны, вы можете использовать метод split для синтаксического анализа входной строки в том, что вам нравится ArrayList.

+0

Почему бы не просто «BufferedReader»? – thejh

+0

вы можете объяснить немного больше? Я новичок в java – gin

+0

@thejh: Я не понимаю, что вы имеете в виду. @gin: Вы знаете, что первые 2 строки файла - это состояние начала и состояние принятия. Кроме того, вы знаете, что из строк с 3 по n вам нужно разделить строки на строки. Таким образом, в основном, выполняйте цикл while с помощью счетчика, и в зависимости от значения счетчика вы знаете, на какой строке вы работаете, таким образом, вы можете соответствующим образом заполнить arraylists. Пожалуйста, взгляните на ссылки, которые я предоставил, чтобы лучше понять, как вы можете реализовать такую ​​систему. – npinti

3

Лучше всего использовать Scanner здесь:

static class State { 
    int in; 
    int out; 
    String symbol; 

    State(int in, int out, String symbol) { 
     this.in = in; 
     this.out = out; 
     this.symbol = symbol; 
    } 

    @Override 
    public String toString() { 
     return in + " " + out + " " + symbol; 
    } 
} 

public static void main(String[] args) throws FileNotFoundException { 

    Scanner s = new Scanner(new File("input.txt")); 

    int startState = Integer.parseInt(s.nextLine()); 
    List<Integer> acceptStates = new LinkedList<Integer>(); 
    List<State> states = new LinkedList<State>(); 

    Scanner st = new Scanner(s.nextLine()); 
    while (st.hasNextInt()) 
     acceptStates.add(st.nextInt()); 

    while (s.hasNextInt()) 
     states.add(new State(s.nextInt(), s.nextInt(), s.next())); 

    System.out.println(startState); 
    System.out.println(acceptStates); 
    System.out.println(states); 

    // logic... 
} 
+0

Я думаю, что OP хочет, чтобы вторая строка стала списком состояний принятия. – thejh

+0

@thejh: fixed :) – dacwe

+0

Имеет ли тот же код, если я использую 'in' и 'out' в строке, а не int? – gin

0

Посмотрите на StringTokenizer, используйте ArrayList с, чтобы создать свои списки.

+0

Из своего javadoc: * StringTokenizer - это унаследованный класс, который сохраняется по соображениям совместимости, хотя его использование не рекомендуется в новом коде *. – BalusC

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