在java中读取具有不同开始和结束分隔符的文件

在java中读取具有不同开始和结束分隔符的文件,java,io,Java,Io,我正在尝试实现会议调度算法。我想随机生成会议并将其存储在文件中。然后在另一段代码中读取此文件,创建不同的代理,他们将尝试安排这些会议 我输入的会议文件如下: 1 20 25 [1, 2, 3, 4, 5] [4, 5] 2 21 29 [1, 6, 7, 5, 33] [1, 5, 33] 从左到右,这些值表示会议id、开始时间、硬截止日期、与会者id列表、基本与会者id列表 基本上,它是整数和整数数组列表的组合(动态,大小不固定)。 为了存储这个,我使用了这个代码 File

我正在尝试实现会议调度算法。我想随机生成会议并将其存储在文件中。然后在另一段代码中读取此文件,创建不同的代理,他们将尝试安排这些会议

我输入的会议文件如下:

1  20  25  [1, 2, 3, 4, 5]  [4, 5]

2  21  29  [1, 6, 7, 5, 33]  [1, 5, 33]
从左到右,这些值表示会议id、开始时间、硬截止日期、与会者id列表、基本与会者id列表

基本上,它是整数和整数数组列表的组合(动态,大小不固定)。 为了存储这个,我使用了这个代码

File fleExample = new File("Meeting.txt")
PrintWriter M1 = new PrintWriter(fleExample);
M1.print(m.getMeetingID()+" "+m.getStartTime()+" "+m.getHardDeadLine()+" "+m.getAttendees()+" "+m,getEssentialAttendees());
M1.println();
我想读取这些值并将其设置为integer variables和integer arraylist

  FileInputStream fstream = new FileInputStream("Meeting.txt");
  DataInputStream inp = new DataInputStream(fstream);
  BufferedReader br = new BufferedReader(new InputStreamReader(inp));
  String strLine;
  while ((strLine = br.readLine()) != null)   {
        String[] tokens = strLine.split(" ");
        for (int i = 0; i < MeetingCount; i++) {
               Meeting meet = new Meeting();
               meet.setMeetingID(Integer.valueOf(tokens[0]));
               meet.setStartTime(Integer.valueOf(tokens[1]));
               meet.setHardDeadLine(Integer.valueOf(tokens[2]));
        }
   }
FileInputStream fstream=newfileinputstream(“Meeting.txt”);
DataInputStream Input=新的DataInputStream(fstream);
BufferedReader br=新的BufferedReader(新的InputStreamReader(inp));
弦斯特林;
而((strLine=br.readLine())!=null){
String[]tokens=strLine.split(“”);
for(int i=0;i
我可以将值设置为整数,但找不到对arraylist执行相同操作的方法。我想将字符串存储到arraylist。这方面的任何帮助都将非常有用

String fileinput="2 21 29 [6 7] [71 45 33]";
Pattern p=Pattern.compile("[0-9]+");    
Matcher m=p.matcher(fileinput);
while (m.find()) {
    int i=Integer.parseInt(fileinput.substring(m.start(), m.end()));
    System.out.println(i);
}
上面的问题是通过使用正则表达式来解决的,在正则表达式中,它连续搜索一个或多个整数,当它们找不到更多整数时中断。
此过程将重复,直到字符串结束。m、 find将返回已识别模式的开始和结束位置。使用开始值和结束值,我们从主字符串中提取子字符串,然后将其解析为整数。

我不太确定您的实现是为了什么(以及
会议对象是关于什么的),但如果您只想将其分配给int或list变量,请尝试使用扫描仪逐个读取它们:

String str = "1 20 25 [1 2 3] [4 5]";

Scanner scan = new Scanner(str);
int intVariable = 0;
ArrayList<Integer> listVariable = null; //null marks no active list

while (scan.hasNext()) { //try/catch here is highly recommeneded!

    //read next input (separated by whitespace)
    String next = scan.next();

    if (next.startsWith("[")) {
        //init new list and store first value into it
        listVariable = new ArrayList<Integer>();
        listVariable.add(Integer.parseInt(next.substring(1)));
    } else if (next.endsWith("]")) {
        //add the last item to the list
        listVariable.add(Integer.parseInt(next.substring(0, next.length()-1)));
        System.out.println(Arrays.toString(listVariable.toArray()));
        //reset the list to null
        listVariable = null;
    } else {
        //if inside a list, add it to list, otherwise it is simply an integer
        if (listVariable != null) {
            listVariable.add(Integer.parseInt(next));
        } else {
            intVariable = Integer.parseInt(next);
            System.out.println(intVariable);
        }
    }
}
String str=“12025[1234][45]”;
扫描仪扫描=新扫描仪(str);
int变量=0;
ArrayList listVariable=null//空标记没有活动列表
强烈建议使用(scan.hasNext()){//try/catch!
//读取下一个输入(用空格分隔)
String next=scan.next();
if(next.startsWith(“[”)){
//初始化新列表并将第一个值存储到其中
listVariable=新的ArrayList();
add(Integer.parseInt(next.substring(1));
}else if(next.endsWith(“])){
//将最后一项添加到列表中
add(Integer.parseInt(next.substring(0,next.length()-1));
System.out.println(Arrays.toString(listVariable.toArray());
//将列表重置为空
listVariable=null;
}否则{
//若在列表中,则将其添加到列表中,否则它只是一个整数
if(listVariable!=null){
add(Integer.parseInt(next));
}否则{
intVariable=Integer.parseInt(下一步);
System.out.println(intVariable);
}
}
}
这里我只是简单地打印了输出,但是您当然可以将其投影到任何需要的地方,或者有一个整数值列表和一个整数值列表

还要注意的是,在这个示例中,我只取了一行文件,但您可以直接向scanner提供您的文件(无需自己逐行读取)


希望这能有所帮助。

您能展示一下您为获取列表所做的努力吗?我将把它分为两个问题,从输入中提取像[71 45 33]这样的片段,并从中构建一个ArrayList。哪一部分比较难?您好,我已经在文件中添加了更多关于编写此文件的详细信息。我假设问题是以精确的方式将[1 2 3]字符串转换为integer类型的arraylist,如果我没有弄错的话。一般来说,如果答案中包含对代码用途的解释,那么答案会更有帮助,这就是为什么不用介绍其他人就能解决问题。谢谢莫汉·拉吉的回复。它增加了我的知识,但找到了一种不同的方法,将整数和arraylist拆分为两个文件。感谢您的回复,它很有帮助:)