我有與此特定格式的文件:閱讀特定格式的文件轉換成的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 - N =過渡表
- 第一行=狀態
- 第二行=狀態出
- A,B =個符號升
如何我FileReader
在Java中讀取這些文件到5角不同的ArrayList
秒(在啓動狀態,最終狀態,狀態,狀態出和符號)?
我有與此特定格式的文件:閱讀特定格式的文件轉換成的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
如何我FileReader
在Java中讀取這些文件到5角不同的ArrayList
秒(在啓動狀態,最終狀態,狀態,狀態出和符號)?
您可以使用Scanner類讀取文件(nextLine() is highly recommended)。由於您知道所需項目的位置,因此您可以使用split方法來解析您喜歡的ArrayList中的輸入字符串。
這是最好使用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...
}
有一個看StringTokenizer,使用ArrayList
s到建立你的名單。
從它的javadoc:* StringTokenizer是一個遺留類,由於兼容性的原因而被保留,儘管它在新代碼*中的使用不受歡迎。 – BalusC 2010-11-21 13:04:09
爲什麼不是一個簡單的'BufferedReader'? – thejh 2010-11-21 12:44:50
你能多解釋一下嗎?我是新來的java – gin 2010-11-21 12:45:16
@thejh:我不明白你的意思到底是什麼。 @gin:你知道文件的前兩行是開始狀態和接受狀態。另外,你知道從第3行到第n行,你需要將行分成幾行。所以基本上,用計數器做一段時間循環,根據計數器的值,你知道你在哪一行工作,因此你可以相應地填入數組列表。請看看我提供的鏈接,以更好地瞭解如何實現此類系統。 – npinti 2010-11-21 13:02:02