From d8fd1e16aa3231a20a8cbd113be03f52b2e50d2a Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 15 Nov 2020 00:36:07 +0800 Subject: [PATCH] add null edit --- CHANGELOG.md | 11 +- .../java/cn/hutool/core/util/StrUtilTest.java | 9 + .../hutool/extra/compress/CompressUtil.java | 74 +++++- .../compress/archiver/SevenZArchiver.java | 13 +- .../java/cn/hutool/poi/excel/RowUtil.java | 2 +- .../cn/hutool/poi/excel/cell/CellUtil.java | 26 +- .../cn/hutool/poi/excel/cell/NullCell.java | 240 ++++++++++++++++++ .../hutool/poi/excel/test/ExcelReadTest.java | 17 ++ .../src/test/resources/null_cell_test.xlsx | Bin 0 -> 8789 bytes 9 files changed, 374 insertions(+), 18 deletions(-) create mode 100644 hutool-poi/src/main/java/cn/hutool/poi/excel/cell/NullCell.java create mode 100644 hutool-poi/src/test/resources/null_cell_test.xlsx diff --git a/CHANGELOG.md b/CHANGELOG.md index 00729e860..58d538385 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,20 +5,23 @@ # 5.5.0 (2020-11-14) +### 大版本特性 +* 【extra 】 增加jakarta.validation-api封装:ValidationUtil(pr#207@Gitee) +* 【extra 】 增加表达式引擎封装:ExpressionUtil(pr#1203@Github) +* 【extra 】 新增基于Apache-FtpServer封装:SimpleFtpServer +* 【extra 】 新增基于Commons-Compress封装:CompressUtil + ### 新特性 * 【core 】 NumberUtil.parseInt等支持123,2.00这类数字(issue#I23ORQ@Gitee) * 【core 】 增加ArrayUtil.isSub、indexOfSub、lastIndexOfSub方法(issue#I23O1K@Gitee) -* 【extra 】 增加ValidationUtil(pr#207@Gitee) * 【core 】 反射调用支持传递参数的值为null(pr#1205@Github) * 【core 】 HexUtil增加format方法(issue#I245NF@Gitee) * 【poi 】 ExcelWriter增加setCurrentRowToEnd方法(issue#I24A2R@Gitee) * 【core 】 ExcelWriter增加setCurrentRowToEnd方法(issue#I24A2R@Gitee) -* 【extra 】 增加表达式引擎封装(ExpressionUtil)(pr#1203@Github) * 【core 】 增加enum转数字支持(issue#I24QZY@Gitee) * 【core 】 NumberUtil.toBigDecimal空白符转换为0(issue#I24MRP@Gitee) * 【core 】 CollUtil和IterUtil增加size方法(pr#208@Gitee) -* 【extra 】 新增SimpleFtpServer -* 【extra 】 新增CompressUtil压缩封装 +* 【poi 】 ExcelReader的read方法读取空单元格增加CellEditor处理(issue#1213@Github) ### Bug修复 * 【core 】 修复DateUtil.current使用System.nanoTime的问题(issue#1198@Github) diff --git a/hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java index 3479a5d8a..8cbdb7eb2 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java @@ -1,5 +1,6 @@ package cn.hutool.core.util; +import cn.hutool.core.lang.Console; import cn.hutool.core.lang.Dict; import org.junit.Assert; import org.junit.Test; @@ -433,6 +434,14 @@ public class StrUtilTest { Assert.assertEquals(0, results2.length); } + @Test + public void subBetweenAllTest3() { + String src1 = "'abc'and'123'"; + + final String[] strings = StrUtil.subBetweenAll(src1, "'", "'"); + Console.log(strings); + } + @Test public void briefTest() { String str = RandomUtil.randomString(1000); diff --git a/hutool-extra/src/main/java/cn/hutool/extra/compress/CompressUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/compress/CompressUtil.java index 07db936c7..fdd0cda3c 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/compress/CompressUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/compress/CompressUtil.java @@ -1,5 +1,7 @@ package cn.hutool.extra.compress; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.extra.compress.archiver.Archiver; import cn.hutool.extra.compress.archiver.SevenZArchiver; import cn.hutool.extra.compress.archiver.StreamArchiver; @@ -8,6 +10,10 @@ import cn.hutool.extra.compress.extractor.SenvenZExtractor; import cn.hutool.extra.compress.extractor.StreamExtractor; import org.apache.commons.compress.archivers.ArchiveStreamFactory; import org.apache.commons.compress.archivers.StreamingNotSupportedException; +import org.apache.commons.compress.compressors.CompressorException; +import org.apache.commons.compress.compressors.CompressorInputStream; +import org.apache.commons.compress.compressors.CompressorOutputStream; +import org.apache.commons.compress.compressors.CompressorStreamFactory; import java.io.File; import java.io.InputStream; @@ -23,6 +29,62 @@ import java.nio.charset.Charset; */ public class CompressUtil { + /** + * 获取压缩输出流,用于压缩指定内容,支持的格式例如: + * + * + * @param compressorName 压缩名称,见:{@link CompressorStreamFactory} + * @param out 输出流,可以输出到内存、网络或文件 + * @return {@link CompressorOutputStream} + */ + public CompressorOutputStream getOut(String compressorName, OutputStream out) { + try { + return new CompressorStreamFactory().createCompressorOutputStream(compressorName, out); + } catch (CompressorException e) { + throw new CompressException(e); + } + } + + /** + * 获取压缩输入流,用于解压缩指定内容,支持的格式例如: + * + * + * @param compressorName 压缩名称,见:{@link CompressorStreamFactory},null表示自动检测 + * @param in 输出流,可以输出到内存、网络或文件 + * @return {@link CompressorOutputStream} + */ + public CompressorInputStream getIn(String compressorName, InputStream in) { + in = IoUtil.toMarkSupportStream(in); + try { + if(StrUtil.isBlank(compressorName)){ + compressorName = CompressorStreamFactory.detect(in); + } + return new CompressorStreamFactory().createCompressorInputStream(compressorName, in); + } catch (CompressorException e) { + throw new CompressException(e); + } + } + /** * 创建归档器,支持: *