修复默认车牌与手机号返回错误

This commit is contained in:
彭宇琦 2021-01-13 12:34:28 +08:00
parent 8b134da54b
commit 816eb5d96a
1 changed files with 59 additions and 45 deletions

View File

@ -32,18 +32,24 @@ import com.auxiliary.tool.date.Time;
import com.opencsv.CSVReader;
/**
* <p><b>文件名</b>TableFileReadUtil.java</p>
* <p><b>用途</b>
* 将存储在文件中的词语以字符串的形式读取并将值存储至{@link TableData}类中可调用类中的方法
* <p>
* <b>文件名</b>TableFileReadUtil.java
* </p>
* <p>
* <b>用途</b> 将存储在文件中的词语以字符串的形式读取并将值存储至{@link TableData}类中可调用类中的方法
* 读取的词语进行返回文件支持表格文件xls/xlsx/csv格式和文本文件doc/docx/txt格式
* </p>
* <p>
* <b>注意文件内首行首段的内容为定制列表的标准若其后的内容获取到的词语个数超出第一行获取到的
* 词语个数则将抛出{@link IllegalDataException}异常
* </b>
* 词语个数则将抛出{@link IllegalDataException}异常 </b>
* </p>
* <p><b>编码时间</b>2020年3月29日 下午2:36:46</p>
* <p><b>修改时间</b>2020年12月25日下午6:40:07</p>
* <p>
* <b>编码时间</b>2020年3月29日 下午2:36:46
* </p>
* <p>
* <b>修改时间</b>2020年12月25日下午6:40:07
* </p>
*
* @author 彭宇琦
* @version Ver1.0
* @since JDK 1.8
@ -230,11 +236,10 @@ public class TableFileReadUtil {
try (Workbook excel = excelOptional.orElseThrow(() -> new UnsupportedFileException("Excel文件读取类未构造"))) {
// 读取excel中的内容若未存储读取的sheet名称则读取第一个sheet
Optional<Sheet> sheetOptional = Optional
Sheet sheet = Optional
.ofNullable(Optional.ofNullable(sheetName).orElse("").isEmpty() ? excel.getSheetAt(0)
: excel.getSheet(sheetName));
// 判断获取的sheet是否为null为Null则同样获取第一个sheet
Sheet sheet = sheetOptional.orElseThrow(() -> new UnsupportedFileException(String.format("“%s”工作表不存在", sheetName)));
: excel.getSheet(sheetName))
.orElseThrow(() -> new UnsupportedFileException(String.format("“%s”工作表不存在", sheetName)));
// 获取第一行内容
Optional<Row> row = Optional.ofNullable(sheet.getRow(0));
@ -278,9 +283,13 @@ public class TableFileReadUtil {
*/
private static List<String> readExcelLineData(Optional<Row> rowOption) {
List<String> dataList = new ArrayList<>();
rowOption.ifPresent(row -> row.cellIterator()
.forEachRemaining(cell -> dataList.add(Optional.ofNullable(getCellContent(cell)).orElse(""))));
rowOption.ifPresent(row -> {
IntStream.range(0, row.getLastCellNum())
.mapToObj(row::getCell)
.map(TableFileReadUtil::getCellContent)
.forEach(dataList::add);
});
return dataList;
}
@ -290,40 +299,43 @@ public class TableFileReadUtil {
* @param cell 单元格类对象
* @return 单元格中的文本
*/
private static String getCellContent(Cell cell) {
// 判断单元格中的内容的格式
if (CellType.NUMERIC == cell.getCellTypeEnum()) {
// 数值类型
// 判断单元格内的数据是否为日期
if (DateUtil.isCellDateFormatted(cell)) {
// 将单元格内容转换为Date后在time中进行存储
Time time = new Time(cell.getDateCellValue());
// 根据存储的时间格式对时间进行转换输出格式化后的时间
return time.getFormatTime();
private static String getCellContent(Cell cellObj) {
return Optional.ofNullable(cellObj).map(cell -> {
// 判断单元格中的内容的格式
if (CellType.NUMERIC == cell.getCellTypeEnum()) {
// 数值类型
// 判断单元格内的数据是否为日期
if (DateUtil.isCellDateFormatted(cell)) {
// 将单元格内容转换为Date后在time中进行存储
Time time = new Time(cell.getDateCellValue());
// 根据存储的时间格式对时间进行转换输出格式化后的时间
return time.getFormatTime();
} else {
// 若非日期格式则强转为字符串格式之后输出
cell.setCellType(CellType.STRING);
return cell.getStringCellValue();
}
} else if (CellType.FORMULA == cell.getCellTypeEnum()) {
// 公式类型
// 公式得到的值可能是一个字符串也可能是一个数字此时则需要进行区分转换错误会抛出异常
try {
return cell.getRichStringCellValue().getString();
} catch (IllegalStateException e) {
return String.valueOf(cell.getNumericCellValue());
}
} else {
// 若非日期格式则强转为字符串格式之后输出
cell.setCellType(CellType.STRING);
// 其他类型按照字符串进行读取
return cell.getStringCellValue();
}
} else if (CellType.FORMULA == cell.getCellTypeEnum()) {
// 公式类型
// 公式得到的值可能是一个字符串也可能是一个数字此时则需要进行区分转换错误会抛出异常
try {
return cell.getRichStringCellValue().getString();
} catch (IllegalStateException e) {
return String.valueOf(cell.getNumericCellValue());
}
} else {
// 其他类型按照字符串进行读取
return cell.getStringCellValue();
}
//若单元格对象为空则返回空串
}).orElse("");
}
/**
* 该方法用于读取并处理旧版(后缀为.doc)word文件可通过切分规则对文本每一行的内容进行切分
*
* @param file 文件
* @param regex 切分规则
* @param regex 切分规则
* @param isFirstTitle 首行是否为标题行
* @return 数据表类对象
* @throws UnsupportedFileException 文件未传入或读取异常时抛出的异常
@ -368,12 +380,14 @@ public class TableFileReadUtil {
.mapToObj(wordFileRange::getParagraph)
// 读取段落的内容对内容进行封装
.map(pa -> Optional.ofNullable(pa.text()))
//去除换行符并过滤掉空行
.map(textOptional -> textOptional.map(text -> text.replaceAll("\\r", "")).filter(text -> !text.isEmpty()))
// 去除换行符并过滤掉空行
.map(textOptional -> textOptional.map(text -> text.replaceAll("\\r", ""))
.filter(text -> !text.isEmpty()))
// 过滤掉无内容的段落
.filter(text -> text.isPresent())
// 切分字符串并转换为词语集合
.map(textOptional -> Arrays.asList(textOptional.orElse("").split(Optional.ofNullable(regex).orElse(""))))
.map(textOptional -> Arrays
.asList(textOptional.orElse("").split(Optional.ofNullable(regex).orElse(""))))
// 按行存储至列表对象中
.forEach(wordTable::addRow);
@ -388,7 +402,7 @@ public class TableFileReadUtil {
* 该方法用于读取并处理新版(后缀为.docx)word文件可通过切分规则对文本每一行的内容进行切分
*
* @param file 文件
* @param regex 切分规则
* @param regex 切分规则
* @param isFirstTitle 首行是否为标题行
* @return 数据表类对象
* @throws UnsupportedFileException 文件未传入或读取异常时抛出的异常
@ -415,11 +429,11 @@ public class TableFileReadUtil {
.asList(Optional.ofNullable(paragraphList.get(0).getText()).filter(text -> !text.isEmpty())
.orElseThrow(() -> new UnsupportedFileException("首段文本为空,无法进行拉取")).split(regex));
// 判断首行是否为标题行若为标题行则读取标题并进行存储若不是则存储默认的标题并存储初始读取行的下标
int startIndex = 0;
int startIndex = 0;
if (isFirstTitle) {
// 存储第一行数据
wordTable.addTitle(firstRowTextList);
//paragraphList.remove(0);//直接移除会抛出异常
// paragraphList.remove(0);//直接移除会抛出异常
// 设置行起始读取下标为第2行
startIndex = 1;
} else {