文本文件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 03: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)));
}
}
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 没输出运行不了什么问题
- ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
- ¥15 点云密度大则包围盒小
- ¥15 nginx使用nfs进行服务器的数据共享
- ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
- ¥15 51嵌入式入门按键小项目
- ¥30 海外项目,如何降低Google Map接口费用?
- ¥15 fluentmeshing
- ¥15 手机/平板的浏览器里如何实现类似荧光笔的效果
- ¥15 盘古气象大模型调用(python)