weixin_42510113 2014-05-28 16:31
浏览 178
已采纳

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

文本文件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】,
......
......

  • 写回答

3条回答 默认 最新

  • 小强1024实验室 2014-05-29 11:51
    关注

    我写了一个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)));
      

      }
      }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 聚类分析或者python进行数据分析
  • ¥15 如何用visual studio code实现html页面
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?