mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
add methods
This commit is contained in:
parent
8af2bd79f8
commit
7cf1b3758d
@ -2440,6 +2440,9 @@ public class CollUtil {
|
||||
* @since 5.2.6
|
||||
*/
|
||||
public static <T> Collection<T> unmodifiable(final Collection<? extends T> c) {
|
||||
if(null == c){
|
||||
return null;
|
||||
}
|
||||
return Collections.unmodifiableCollection(c);
|
||||
}
|
||||
|
||||
|
@ -609,4 +609,19 @@ public class ListUtil {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 转为只读List
|
||||
*
|
||||
* @param <T> 元素类型
|
||||
* @param c 集合
|
||||
* @return 只读集合
|
||||
* @since 6.0.0
|
||||
*/
|
||||
public static <T> List<T> unmodifiable(final List<? extends T> c) {
|
||||
if (null == c) {
|
||||
return null;
|
||||
}
|
||||
return Collections.unmodifiableList(c);
|
||||
}
|
||||
}
|
||||
|
@ -175,6 +175,21 @@ public class SetUtil {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
/**
|
||||
* 转为只读Set
|
||||
*
|
||||
* @param <T> 元素类型
|
||||
* @param c 集合
|
||||
* @return 只读集合
|
||||
* @since 6.0.0
|
||||
*/
|
||||
public static <T> Set<T> unmodifiable(final Set<? extends T> c) {
|
||||
if (null == c) {
|
||||
return null;
|
||||
}
|
||||
return Collections.unmodifiableSet(c);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新建一个HashSet
|
||||
*
|
||||
|
@ -1,11 +1,12 @@
|
||||
package cn.hutool.core.convert.impl;
|
||||
|
||||
import cn.hutool.core.convert.AbstractConverter;
|
||||
import cn.hutool.core.convert.ConvertException;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.BooleanUtil;
|
||||
import cn.hutool.core.util.ByteUtil;
|
||||
import cn.hutool.core.math.NumberUtil;
|
||||
import cn.hutool.core.text.StrUtil;
|
||||
import cn.hutool.core.util.BooleanUtil;
|
||||
import cn.hutool.core.util.ByteUtil;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
@ -50,7 +51,8 @@ public class NumberConverter extends AbstractConverter {
|
||||
@Override
|
||||
protected String convertToStr(final Object value) {
|
||||
final String result = StrUtil.trim(super.convertToStr(value));
|
||||
if (StrUtil.isNotEmpty(result)) {
|
||||
if (null != result && result.length() > 1) {
|
||||
// 非单个字符才判断末尾的标识符
|
||||
final char c = Character.toUpperCase(result.charAt(result.length() - 1));
|
||||
if (c == 'D' || c == 'L' || c == 'F') {
|
||||
// 类型标识形式(例如123.6D)
|
||||
@ -58,6 +60,9 @@ public class NumberConverter extends AbstractConverter {
|
||||
}
|
||||
}
|
||||
|
||||
if(StrUtil.isEmpty(result)){
|
||||
throw new ConvertException("Can not convert empty value to Number!");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -96,7 +101,7 @@ public class NumberConverter extends AbstractConverter {
|
||||
}
|
||||
final String valueStr = toStrFunc.apply(value);
|
||||
try{
|
||||
return StrUtil.isBlank(valueStr) ? null : Byte.valueOf(valueStr);
|
||||
return Byte.valueOf(valueStr);
|
||||
} catch (final NumberFormatException e){
|
||||
return NumberUtil.parseNumber(valueStr).byteValue();
|
||||
}
|
||||
@ -108,7 +113,7 @@ public class NumberConverter extends AbstractConverter {
|
||||
}
|
||||
final String valueStr = toStrFunc.apply((value));
|
||||
try{
|
||||
return StrUtil.isBlank(valueStr) ? null : Short.valueOf(valueStr);
|
||||
return Short.valueOf(valueStr);
|
||||
} catch (final NumberFormatException e){
|
||||
return NumberUtil.parseNumber(valueStr).shortValue();
|
||||
}
|
||||
@ -125,7 +130,7 @@ public class NumberConverter extends AbstractConverter {
|
||||
return (int) DateUtil.toInstant((TemporalAccessor) value).toEpochMilli();
|
||||
}
|
||||
final String valueStr = toStrFunc.apply((value));
|
||||
return StrUtil.isBlank(valueStr) ? null : NumberUtil.parseInt(valueStr);
|
||||
return NumberUtil.parseInt(valueStr);
|
||||
} else if (AtomicInteger.class == targetType) {
|
||||
final Number number = convert(value, Integer.class, toStrFunc);
|
||||
if (null != number) {
|
||||
@ -144,7 +149,7 @@ public class NumberConverter extends AbstractConverter {
|
||||
return DateUtil.toInstant((TemporalAccessor) value).toEpochMilli();
|
||||
}
|
||||
final String valueStr = toStrFunc.apply((value));
|
||||
return StrUtil.isBlank(valueStr) ? null : NumberUtil.parseLong(valueStr);
|
||||
return NumberUtil.parseLong(valueStr);
|
||||
} else if (AtomicLong.class == targetType) {
|
||||
final Number number = convert(value, Long.class, toStrFunc);
|
||||
if (null != number) {
|
||||
@ -165,7 +170,7 @@ public class NumberConverter extends AbstractConverter {
|
||||
return BooleanUtil.toFloatObj((Boolean) value);
|
||||
}
|
||||
final String valueStr = toStrFunc.apply((value));
|
||||
return StrUtil.isBlank(valueStr) ? null : NumberUtil.parseFloat(valueStr);
|
||||
return NumberUtil.parseFloat(valueStr);
|
||||
} else if (Double.class == targetType) {
|
||||
if (value instanceof Number) {
|
||||
return NumberUtil.toDouble((Number) value);
|
||||
@ -173,7 +178,7 @@ public class NumberConverter extends AbstractConverter {
|
||||
return BooleanUtil.toDoubleObj((Boolean) value);
|
||||
}
|
||||
final String valueStr = toStrFunc.apply((value));
|
||||
return StrUtil.isBlank(valueStr) ? null : NumberUtil.parseDouble(valueStr);
|
||||
return NumberUtil.parseDouble(valueStr);
|
||||
} else if (DoubleAdder.class == targetType) {
|
||||
//jdk8 新增
|
||||
final Number number = convert(value, Double.class, toStrFunc);
|
||||
@ -193,7 +198,7 @@ public class NumberConverter extends AbstractConverter {
|
||||
return BooleanUtil.toInteger((Boolean) value);
|
||||
}
|
||||
final String valueStr = toStrFunc.apply((value));
|
||||
return StrUtil.isBlank(valueStr) ? null : NumberUtil.parseNumber(valueStr);
|
||||
return NumberUtil.parseNumber(valueStr);
|
||||
}
|
||||
|
||||
throw new UnsupportedOperationException(StrUtil.format("Unsupport Number type: {}", targetType.getName()));
|
||||
|
@ -113,6 +113,12 @@ public class ConvertTest {
|
||||
Assert.assertEquals(Integer.valueOf(-1), aInt);
|
||||
}
|
||||
|
||||
@Test(expected = NumberFormatException.class)
|
||||
public void toIntOfExceptionTest(){
|
||||
final Integer d = Convert.convert(Integer.class, "d");
|
||||
Assert.assertNotNull(d);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void toLongTest() {
|
||||
final String a = " 342324545435435";
|
||||
|
@ -1,7 +1,6 @@
|
||||
package cn.hutool.core.map;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.convert.ConvertException;
|
||||
import cn.hutool.core.lang.Opt;
|
||||
import cn.hutool.core.text.StrUtil;
|
||||
import lombok.Builder;
|
||||
@ -217,9 +216,9 @@ public class MapUtilTest {
|
||||
Assert.assertEquals(Integer.valueOf(2), map.get("b"));
|
||||
}
|
||||
|
||||
@Test(expected = ConvertException.class)
|
||||
@Test(expected = NumberFormatException.class)
|
||||
public void getIntTest(){
|
||||
final Map<String, String> map = MapUtil.ofEntries(MapUtil.entry("a", "D"));
|
||||
final Map<String, String> map = MapUtil.ofEntries(MapUtil.entry("a", "d"));
|
||||
final Integer a = MapUtil.getInt(map, "a");
|
||||
Assert.assertNotNull(a);
|
||||
}
|
||||
|
@ -434,4 +434,10 @@ public class NumberUtilTest {
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
NumberUtil.range(0, Integer.MIN_VALUE);
|
||||
}
|
||||
|
||||
@Test(expected = NumberFormatException.class)
|
||||
public void parseIntTest3() {
|
||||
int v1 = NumberUtil.parseInt("d");
|
||||
Assert.assertEquals(0, v1);
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ import java.util.Map;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class ReUtilTest {
|
||||
final String content = "ZZZaaabbbccc中文1234";
|
||||
static final String content = "ZZZaaabbbccc中文1234";
|
||||
|
||||
@Test
|
||||
public void getTest() {
|
||||
@ -144,6 +144,22 @@ public class ReUtilTest {
|
||||
Assert.assertEquals("我有个\\$符号\\{\\}", escape);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void escapeTest2(){
|
||||
final String str = "a[bbbc";
|
||||
final String re = "[";
|
||||
final String s = ReUtil.get(ReUtil.escape(re), str, 0);
|
||||
Assert.assertEquals("[", s);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void escapeTest3(){
|
||||
final String context = "{prefix}_";
|
||||
final String regex = "{prefix}_";
|
||||
final boolean b = ReUtil.isMatch(ReUtil.escape(regex), context);
|
||||
Assert.assertTrue(b);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAllGroupsTest() {
|
||||
//转义给定字符串,为正则相关的特殊符号转义
|
||||
|
@ -75,6 +75,8 @@ public class StreamExtractor implements Extractor{
|
||||
this.in = factory.createArchiveInputStream(archiverName, in);
|
||||
}
|
||||
} catch (final ArchiveException e) {
|
||||
// issue#2384,如果报错可能持有文件句柄,导致无法删除文件
|
||||
IoUtil.close(in);
|
||||
throw new CompressException(e);
|
||||
}
|
||||
}
|
||||
|
@ -395,6 +395,21 @@ public class HttpResponse extends HttpBase<HttpResponse> implements Closeable {
|
||||
public long writeBody(final String targetFileOrDir) {
|
||||
return writeBody(FileUtil.file(targetFileOrDir));
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置主体字节码,一版用于拦截器修改响应内容<br>
|
||||
* 需在此方法调用前使用charset方法设置编码,否则使用默认编码UTF-8
|
||||
*
|
||||
* @param bodyBytes 主体
|
||||
* @return this
|
||||
*/
|
||||
public HttpResponse body(final byte[] bodyBytes) {
|
||||
sync();
|
||||
if (null != bodyBytes) {
|
||||
this.bodyBytes = bodyBytes;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
// ---------------------------------------------------------------- Body end
|
||||
|
||||
@Override
|
||||
|
@ -77,6 +77,8 @@ public class JSONParser {
|
||||
case ';':
|
||||
case ',':
|
||||
if (tokener.nextClean() == '}') {
|
||||
// issue#2380
|
||||
// 尾后逗号(Trailing Commas),JSON中虽然不支持,但是ECMAScript 2017支持,此处做兼容。
|
||||
return;
|
||||
}
|
||||
tokener.back();
|
||||
|
@ -1,7 +1,8 @@
|
||||
package cn.hutool.poi.csv;
|
||||
|
||||
import cn.hutool.core.collection.ListUtil;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
@ -42,7 +43,7 @@ public class CsvData implements Iterable<CsvRow>, Serializable {
|
||||
* @return the header row - might be {@code null} if no header exists
|
||||
*/
|
||||
public List<String> getHeader() {
|
||||
return Collections.unmodifiableList(this.header);
|
||||
return ListUtil.unmodifiable(this.header);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user