请大家帮我看看这个题是怎么个意思,应该如何去做!谢谢

文本文件A.txt中顺序包含如下文本:
HEDRA
SHDRA
POSDA1
POSDA2
POSDA3
HEDRB
SHDRB
POSDB1
POSDB2
POSDB3
.....
.....
TLRL
其中每个文本行前四个字母称为行类型,每个文本块从HEDR行开始到下个HEDR结束(不含下个HEDR行),最后一个TLRL是文件结束标志。
约束条件1、处理掉文件不存在、文件打开或读取失败等异常。2、忽略掉空行。3、每个文本行前四个字符必须由三个大写英文字母加一个大写英文字母或一个数字组成,要求用正则表达式进行验证。4、如果文件末尾没有TLRL行,则返回空ArrayList,即认为该文件无效。
请编写一个方法,返回由若干个文件块组成的ArrayList,即其中每个元素是文本块,每个文本块也定义成一个ArrayList.
返回的ArrayList的内存映射如下描述

【HEDRA,SHDRA,POSD,POSD】,
【HEDRB,SHDRB,POSD,POSD】,
......
......

我写了一个demo,希望能帮到你
package com.wenqiang.regex;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

/**

  • 其中每个文本行前四个字母称为行类型,每个文本块从HEDR行开始到下个HEDR结束(不含下个HEDR行),最后一个TLRL是文件结束标志。
  • 约束条件:
  • 1、处理掉文件不存在、文件打开或读取失败等异常。
  • 2、忽略掉空行。
  • 3、每个文本行前四个字符必须由三个大写英文字母加一个大写英文字母或一个数字组成,要求用正则表达式进行验证。
  • 4、如果文件末尾没有TLRL行,则返回空ArrayList,即认为该文件无效。
  • 请编写一个方法,返回由若干个文件块组成的ArrayList,即其中每个元素是文本块,每个文本块也定义成一个ArrayList.
  • @author wenqiang
    *
    */
    public class MessageHander {

    private final static String reg = "^[A-Z]{3}[A-Z0-9]+";

    public boolean pathIsExist(String path){

    File file = new File(path);
    
    return fileIsExist(file);
    

    }

    public boolean fileIsExist(File file){
    return file.exists();
    }

    public List> handerMsg(String filepath){

    List<ArrayList<String>> msgList = new ArrayList<ArrayList<String>>();
    
    if(!pathIsExist(filepath)){
    
        System.out.println("文件不存在!--PATH");
    }else{
    
        File file = new File(filepath);
    
        FileInputStream fis = null;
    
        InputStreamReader isr = null;
    
        BufferedReader br = null;
        try {
             fis = new FileInputStream(file);
    
             isr = new InputStreamReader(fis);
    
             br =  new BufferedReader(isr);
    
             String temp = "";
    
             ArrayList<String> tempList = null;
             try {
                while(true){
                    temp = br.readLine();
                    if("TLRL".equals(temp)){
                        if(tempList!=null){
                            msgList.add(tempList);
                        }
                        System.out.println("文件读取结束--TLRL!");
                        break;
                    }else if(temp==null){
                        if(tempList!=null){
                            msgList.add(tempList);
                        }
                        System.out.println("文件读取结束--NULL!");
                        break;
                    }else{
                        if("".equals(temp)){
    
                        }else if(Pattern.matches(reg, temp.trim())&&"HED".equals(temp.substring(0, 3))){
                            if(tempList!=null){
                                msgList.add(tempList);
                            }
                            tempList = new ArrayList<String>();
                            tempList.add(temp);
                        }else{
                            tempList.add(temp);
                        }
    
                    }
    
                 }
            } catch (IOException e) {
    
                System.out.println("文件读取失败--IO!");
                e.printStackTrace();
                return msgList;
            }
    
        } catch (FileNotFoundException e) {
            System.out.println("文件打不开!--FILE");
            e.printStackTrace();
            return msgList;
        }finally{
            try {
                br.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    return msgList;
    

    }

    public static void main(String[] args) {

    String filepath = "e:/file.txt";
    
    List<ArrayList<String>> resultList = new MessageHander().handerMsg(filepath);
    
    System.out.println(resultList.size());
    
    System.out.println(resultList.toString());
    //System.out.println(Pattern.matches(reg, "HEDRA"));
    //System.out.println("HED".equals("HEDRA".substring(0, 3)));
    

    }
    }

[code="java"]
1.验证文件的合法性
2.读取文本内容,按文本块分组构成arraylist返回

[/code]

约束1:打开文件或者读取文件失败要捕获异常信息用try catch就好了
约束2:while((line = br.readLine()) ==null)不读取这行
约束3:用正则验证前四个字符,每次读取一行,截取前四个九OK了,至于正则表达式,网上搜一下
约束4:while((sc.hasNextLine()&&(line=sc.nextLine())!=null)){
if(!sc.hasNextLine())
System.out.println(line);判断line的值是否是TLRL
}

最后的意思就是:你每次读取一个HEDR开头的到head结尾的数据,就把他放在arraylist中