Java 将特定格式的文件读入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 0 2 4 01 A 0.5 B 11A 13b 26 A 2.4 B 36A 34 B 46A 4 B 51A 5 B 6 A 6.2 BJava 将特定格式的文件读入ArrayList,java,arraylist,filereader,Java,Arraylist,Filereader,我有此特定格式的文件: 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 0 2 4 01 A 0.5 B 11A 13b 26 A 2.4 B 36A 34 B 46A 4 B 51A 5 B 6 A 6.2 B 第1行=开始状态 第2行=接受状态 第3行-n=转换表 第1行=中的状态 第二行=状
- 第1行=开始状态
- 第2行=接受状态
- 第3行-n=转换表
- 第1行=中的状态
- 第二行=状态输出
- A、 B=符号
FileReader如何将这些文件读入5个不同的ArrayList
s(开始状态、最终状态、状态输入、状态输出和符号)?这里最好使用一个:
静态类状态{
int-in;
指出;
字符串符号;
状态(整数输入、整数输出、字符串符号){
this.in=in;
this.out=out;
这个符号=符号;
}
@凌驾
公共字符串toString(){
返回输入+“”+输出+“”+符号;
}
}
公共静态void main(字符串[]args)引发FileNotFoundException{
扫描仪s=新扫描仪(新文件(“input.txt”);
int startState=Integer.parseInt(s.nextLine());
List acceptStates=new LinkedList();
列表状态=新建LinkedList();
Scanner st=新的扫描仪(s.nextLine());
而(st.Hasnetint())
add(st.nextInt());
而(s.hasnetint())
添加(新状态(s.nextInt(),s.nextInt(),s.next());
系统输出打印LN(开始状态);
System.out.println(接受状态);
系统输出打印(状态);
//逻辑。。。
}
最好在此处使用:
静态类状态{
int-in;
指出;
字符串符号;
状态(整数输入、整数输出、字符串符号){
this.in=in;
this.out=out;
这个符号=符号;
}
@凌驾
公共字符串toString(){
返回输入+“”+输出+“”+符号;
}
}
公共静态void main(字符串[]args)引发FileNotFoundException{
扫描仪s=新扫描仪(新文件(“input.txt”);
int startState=Integer.parseInt(s.nextLine());
List acceptStates=new LinkedList();
列表状态=新建LinkedList();
Scanner st=新的扫描仪(s.nextLine());
而(st.Hasnetint())
add(st.nextInt());
而(s.hasnetint())
添加(新状态(s.nextInt(),s.nextInt(),s.next());
系统输出打印LN(开始状态);
System.out.println(接受状态);
系统输出打印(状态);
//逻辑。。。
}
查看,使用ArrayList
s建立列表。查看,使用ArrayList
s建立列表。您可以使用该类读取文件()。由于您知道所需项的位置,因此可以使用该方法在任意ArrayList中解析输入字符串。您可以使用该类读取文件()。既然您知道所需项的位置,那么就可以使用该方法在任意数组列表中解析输入字符串。为什么不使用一个简单的BufferedReader
?您能再解释一下吗?我是新来的java@thejh例如我不明白你的确切意思@金:你知道文件的前两行是开始状态和接受状态。另外,您知道从第3行到第n行,需要将这些行拆分为行。所以基本上,用一个计数器做一个while循环,根据计数器的值,你知道你在哪一行工作,因此你可以相应地填充ArrayList。请查看我提供的链接,以便更好地了解如何实现这样的系统。hhmm,。所以我必须让一个while循环读取每一行的内容,while循环将这些行的内容发送到不同的arraylist?是的。阅读这些行,必要时将其拆分。由于所有数据都有一个固定的位置,您应该能够将正确的数据放在正确的arraylist中。为什么不使用一个简单的BufferedReader
?您能再解释一下吗?我是新来的java@thejh例如我不明白你的确切意思@金:你知道文件的前两行是开始状态和接受状态。另外,您知道从第3行到第n行,需要将这些行拆分为行。所以基本上,用一个计数器做一个while循环,根据计数器的值,你知道你在哪一行工作,因此你可以相应地填充ArrayList。请查看我提供的链接,以便更好地了解如何实现这样的系统。hhmm,。所以我必须让一个while循环读取每一行的内容,while循环将这些行的内容发送到不同的arraylist?是的。阅读这些行,必要时将其拆分。由于所有数据都有一个固定的位置,您应该能够将正确的数据放在正确的arraylist中。我认为OP希望第二行成为接受状态的列表。如果我在字符串中使用“in”和“out”而不是int,它的代码是否相同?几乎,使用next()而不是nextInt()然后。我认为OP希望第二行成为接受状态的列表。如果我在字符串中使用'in'和'out'而不是int,它的代码是否相同?几乎,使用next()而不是nextInt()然后。从它的javadoc:StringTokenizer是一个遗留类,尽管在新代码中不鼓励使用它,但出于兼容性原因保留它。从它的javadoc:StringTokenizer是一个遗留类,尽管在新代码中不鼓励使用它,但出于兼容性原因保留它。
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...
}