From b30bf90210754687df269cdf919bcf1157754f0f Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 13 Jul 2024 12:04:43 +0800 Subject: [PATCH] fix code --- .../hutool/core/codec/PercentCodec.java | 2 +- .../hutool/core/collection/iter/IterUtil.java | 3 +- .../hutool/core/compress/ZipWriter.java | 2 +- .../dromara/hutool/core/convert/Convert.java | 171 ++++++++++-------- .../hutool/core/date/BetweenFormatter.java | 2 +- .../hutool/core/date/CalendarUtil.java | 4 +- .../io/resource/CharSequenceResource.java | 2 +- .../hutool/core/io/resource/ResourceUtil.java | 2 +- .../dromara/hutool/core/lang/Validator.java | 2 +- .../dromara/hutool/core/net/url/UrlPath.java | 13 +- .../dromara/hutool/core/net/url/UrlQuery.java | 2 +- .../hutool/core/net/url/UrlQueryUtil.java | 8 +- .../dromara/hutool/core/net/url/UrlUtil.java | 2 +- .../hutool/core/reflect/ClassScanner.java | 2 +- .../org/dromara/hutool/core/regex/ReUtil.java | 87 +++++---- .../hutool/core/text/CharSequenceUtil.java | 143 +++++++++------ .../dromara/hutool/core/text/StrJoiner.java | 3 +- .../dromara/hutool/core/text/StrTrimer.java | 2 +- .../org/dromara/hutool/core/text/StrUtil.java | 35 ---- .../hutool/core/text/StrValidator.java | 62 +++++++ .../hutool/core/text/escape/EscapeUtil.java | 2 +- .../text/replacer/RangeReplacerByChar.java | 6 +- .../text/replacer/RangeReplacerByStr.java | 6 +- .../core/text/replacer/SearchReplacer.java | 6 +- .../org/dromara/hutool/core/util/ObjUtil.java | 24 --- .../org/dromara/hutool/core/xml/XmlUtil.java | 4 +- .../dromara/hutool/core/util/ObjUtilTest.java | 5 +- .../hutool/db/config/SettingConfigParser.java | 2 +- .../java/org/dromara/hutool/db/ds/DSPool.java | 2 +- .../engine/analysis/AnalysisEngine.java | 2 +- .../tokenizer/engine/ansj/AnsjEngine.java | 2 +- .../tokenizer/engine/hanlp/HanLPEngine.java | 2 +- .../tokenizer/engine/jcseg/JcsegEngine.java | 2 +- .../tokenizer/engine/jieba/JiebaEngine.java | 2 +- .../tokenizer/engine/mynlp/MynlpEngine.java | 2 +- .../tokenizer/engine/word/WordEngine.java | 2 +- .../dromara/hutool/http/GlobalHeaders.java | 2 +- .../hutool/http/client/HeaderOperation.java | 2 +- .../org/dromara/hutool/json/JSONTokener.java | 5 +- .../cell/setters/EscapeStrCellSetter.java | 2 +- .../dromara/hutool/setting/GroupedMap.java | 22 +-- .../hutool/setting/profile/Profile.java | 2 +- .../dromara/hutool/setting/props/Props.java | 5 +- .../hutool/setting/toml/TomlWriter.java | 2 +- 44 files changed, 361 insertions(+), 301 deletions(-) diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/codec/PercentCodec.java b/hutool-core/src/main/java/org/dromara/hutool/core/codec/PercentCodec.java index 1afa7d0b8..239541974 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/codec/PercentCodec.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/codec/PercentCodec.java @@ -115,7 +115,7 @@ public class PercentCodec implements Encoder, Serializable { */ public String encode(final CharSequence path, final Charset charset, final char... customSafeChar) { if (null == charset || StrUtil.isEmpty(path)) { - return StrUtil.str(path); + return StrUtil.toStringOrNull(path); } final StringBuilder rewrittenPath = new StringBuilder(path.length() * 3); diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/collection/iter/IterUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/collection/iter/IterUtil.java index e47ad61a9..8571581f3 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/collection/iter/IterUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/collection/iter/IterUtil.java @@ -15,6 +15,7 @@ package org.dromara.hutool.core.collection.iter; import org.dromara.hutool.core.array.ArrayUtil; import org.dromara.hutool.core.collection.CollUtil; import org.dromara.hutool.core.collection.ListUtil; +import org.dromara.hutool.core.convert.Convert; import org.dromara.hutool.core.lang.Assert; import org.dromara.hutool.core.map.MapUtil; import org.dromara.hutool.core.math.NumberUtil; @@ -906,7 +907,7 @@ public class IterUtil { * @since 5.8.0 */ public static String toStr(final Iterator iterator) { - return toStr(iterator, ObjUtil::toString); + return toStr(iterator, Convert::toStrOrNullStr); } /** diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/compress/ZipWriter.java b/hutool-core/src/main/java/org/dromara/hutool/core/compress/ZipWriter.java index 8222855be..4d05764d0 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/compress/ZipWriter.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/compress/ZipWriter.java @@ -206,7 +206,7 @@ public class ZipWriter implements Closeable { * @throws IORuntimeException IO异常 */ public ZipWriter add(String path, final InputStream in) throws IORuntimeException { - path = StrUtil.emptyIfNull(path); + path = StrUtil.toStringOrEmpty(path); if (null == in) { // 空目录需要检查路径规范性,目录以"/"结尾 path = StrUtil.addSuffixIfNot(path, StrUtil.SLASH); diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/convert/Convert.java b/hutool-core/src/main/java/org/dromara/hutool/core/convert/Convert.java index 71671af03..83683cdba 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/convert/Convert.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/convert/Convert.java @@ -57,7 +57,7 @@ public class Convert { * 如果给定的值为null,或者转换失败,返回默认值
* 转换失败不会报错 * - * @param value 被转换的值 + * @param value 被转换的值 * @param defaultValue 转换错误时的默认值 * @return 结果 */ @@ -77,6 +77,18 @@ public class Convert { return toStr(value, null); } + /** + * 转换为字符串
+ * 如果给定的值为{@code null},或者转换失败,返回默认值"null"(即null这个字符串)
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static String toStrOrNullStr(final Object value) { + return toStr(value, StrUtil.NULL); + } + /** * 转换为String数组 * @@ -93,7 +105,7 @@ public class Convert { * 如果给定的值为null,或者转换失败,返回默认值
* 转换失败不会报错 * - * @param value 被转换的值 + * @param value 被转换的值 * @param defaultValue 转换错误时的默认值 * @return 结果 */ @@ -129,7 +141,7 @@ public class Convert { * 如果给定的值为{@code null},或者转换失败,返回默认值
* 转换失败不会报错 * - * @param value 被转换的值 + * @param value 被转换的值 * @param defaultValue 转换错误时的默认值 * @return 结果 */ @@ -176,7 +188,7 @@ public class Convert { * 如果给定的值为{@code null},或者转换失败,返回默认值
* 转换失败不会报错 * - * @param value 被转换的值 + * @param value 被转换的值 * @param defaultValue 转换错误时的默认值 * @return 结果 */ @@ -212,7 +224,7 @@ public class Convert { * 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错 * - * @param value 被转换的值 + * @param value 被转换的值 * @param defaultValue 转换错误时的默认值 * @return 结果 */ @@ -248,7 +260,7 @@ public class Convert { * 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错 * - * @param value 被转换的值 + * @param value 被转换的值 * @param defaultValue 转换错误时的默认值 * @return 结果 */ @@ -283,7 +295,7 @@ public class Convert { * 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错 * - * @param value 被转换的值 + * @param value 被转换的值 * @param defaultValue 转换错误时的默认值 * @return 结果 */ @@ -318,7 +330,7 @@ public class Convert { * 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错 * - * @param value 被转换的值 + * @param value 被转换的值 * @param defaultValue 转换错误时的默认值 * @return 结果 */ @@ -353,7 +365,7 @@ public class Convert { * 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错 * - * @param value 被转换的值 + * @param value 被转换的值 * @param defaultValue 转换错误时的默认值 * @return 结果 */ @@ -388,7 +400,7 @@ public class Convert { * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错 * - * @param value 被转换的值 + * @param value 被转换的值 * @param defaultValue 转换错误时的默认值 * @return 结果 */ @@ -423,7 +435,7 @@ public class Convert { * 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错 * - * @param value 被转换的值 + * @param value 被转换的值 * @param defaultValue 转换错误时的默认值 * @return 结果 */ @@ -448,7 +460,7 @@ public class Convert { * 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错 * - * @param value 被转换的值 + * @param value 被转换的值 * @param defaultValue 转换错误时的默认值 * @return 结果 */ @@ -473,7 +485,7 @@ public class Convert { * 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错 * - * @param value 被转换的值 + * @param value 被转换的值 * @param defaultValue 转换错误时的默认值 * @return 结果 * @since 4.1.6 @@ -487,7 +499,7 @@ public class Convert { * 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错 * - * @param value 被转换的值 + * @param value 被转换的值 * @param defaultValue 转换错误时的默认值 * @return 结果 * @since 5.0.7 @@ -513,7 +525,7 @@ public class Convert { * 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错 * - * @param value 被转换的值 + * @param value 被转换的值 * @param defaultValue 转换错误时的默认值 * @return 结果 * @since 5.0.7 @@ -539,17 +551,17 @@ public class Convert { * 转换为Enum对象
* 如果给定的值为空,或者转换失败,返回默认值
* - * @param 枚举类型 - * @param clazz Enum的Class - * @param value 值 + * @param 枚举类型 + * @param clazz Enum的Class + * @param value 值 * @param defaultValue 默认值 * @return Enum */ @SuppressWarnings("unchecked") public static > E toEnum(final Class clazz, final Object value, final E defaultValue) { - try{ + try { return (E) EnumConverter.INSTANCE.convert(clazz, value); - } catch (final Exception ignore){ + } catch (final Exception ignore) { return defaultValue; } } @@ -558,7 +570,7 @@ public class Convert { * 转换为Enum对象
* 如果给定的值为空,或者转换失败,返回默认值{@code null}
* - * @param 枚举类型 + * @param 枚举类型 * @param clazz Enum的Class * @param value 值 * @return Enum @@ -571,8 +583,8 @@ public class Convert { * 转换为集合类 * * @param collectionType 集合类型 - * @param elementType 集合中元素类型 - * @param value 被转换的值 + * @param elementType 集合中元素类型 + * @param value 被转换的值 * @return {@link Collection} * @since 3.0.8 */ @@ -594,9 +606,9 @@ public class Convert { /** * 转换为ArrayList * - * @param 元素类型 + * @param 元素类型 * @param elementType 集合中元素类型 - * @param value 被转换的值 + * @param value 被转换的值 * @return {@link ArrayList} * @since 4.1.20 */ @@ -608,9 +620,9 @@ public class Convert { /** * 转换为HashSet * - * @param 元素类型 + * @param 元素类型 * @param elementType 集合中元素类型 - * @param value 被转换的值 + * @param value 被转换的值 * @return {@link HashSet} * @since 5.7.3 */ @@ -657,78 +669,78 @@ public class Convert { /** * 转换值为指定类型,类型采用字符串表示 * - * @param 目标类型 + * @param 目标类型 * @param className 类的字符串表示 - * @param value 值 + * @param value 值 * @return 转换后的值 - * @since 4.0.7 * @throws ConvertException 转换器不存在 + * @since 4.0.7 */ - public static T convertByClassName(final String className, final Object value) throws ConvertException{ + public static T convertByClassName(final String className, final Object value) throws ConvertException { return convert(ClassLoaderUtil.loadClass(className), value); } /** * 转换值为指定类型 * - * @param 目标类型 - * @param type 类型 + * @param 目标类型 + * @param type 类型 * @param value 值 * @return 转换后的值 - * @since 4.0.0 * @throws ConvertException 转换器不存在 + * @since 4.0.0 */ - public static T convert(final Class type, final Object value) throws ConvertException{ - return convert((Type)type, value); + public static T convert(final Class type, final Object value) throws ConvertException { + return convert((Type) type, value); } /** * 转换值为指定类型 * - * @param 目标类型 + * @param 目标类型 * @param reference 类型参考,用于持有转换后的泛型类型 - * @param value 值 + * @param value 值 * @return 转换后的值 * @throws ConvertException 转换器不存在 */ - public static T convert(final TypeReference reference, final Object value) throws ConvertException{ + public static T convert(final TypeReference reference, final Object value) throws ConvertException { return convert(reference.getType(), value, null); } /** * 转换值为指定类型 * - * @param 目标类型 - * @param type 类型 + * @param 目标类型 + * @param type 类型 * @param value 值 * @return 转换后的值 * @throws ConvertException 转换器不存在 */ - public static T convert(final Type type, final Object value) throws ConvertException{ + public static T convert(final Type type, final Object value) throws ConvertException { return convert(type, value, null); } /** * 转换值为指定类型 * - * @param 目标类型 - * @param type 类型 - * @param value 值 + * @param 目标类型 + * @param type 类型 + * @param value 值 * @param defaultValue 默认值 * @return 转换后的值 * @throws ConvertException 转换器不存在 * @since 4.0.0 */ public static T convert(final Class type, final Object value, final T defaultValue) throws ConvertException { - return convert((Type)type, value, defaultValue); + return convert((Type) type, value, defaultValue); } /** * 转换值为指定类型 * - * @param 目标类型 - * @param type 类型 - * @param value 值 + * @param 目标类型 + * @param type 类型 + * @param value 值 * @param defaultValue 默认值 * @return 转换后的值 * @throws ConvertException 转换器不存在 @@ -741,8 +753,8 @@ public class Convert { * 转换值为指定类型,不抛异常转换
* 当转换失败时返回{@code null} * - * @param 目标类型 - * @param type 目标类型 + * @param 目标类型 + * @param type 目标类型 * @param value 值 * @return 转换后的值,转换失败返回null * @since 4.5.10 @@ -755,9 +767,9 @@ public class Convert { * 转换值为指定类型,不抛异常转换
* 当转换失败时返回默认值 * - * @param 目标类型 - * @param type 目标类型 - * @param value 值 + * @param 目标类型 + * @param type 目标类型 + * @param value 值 * @param defaultValue 默认值 * @return 转换后的值 * @since 4.5.10 @@ -770,11 +782,11 @@ public class Convert { * 转换值为指定类型,可选是否不抛异常转换
* 当转换失败时返回默认值 * - * @param 目标类型 - * @param type 目标类型 - * @param value 值 + * @param 目标类型 + * @param type 目标类型 + * @param value 值 * @param defaultValue 默认值 - * @param quietly 是否静默转换,true不抛异常 + * @param quietly 是否静默转换,true不抛异常 * @return 转换后的值 * @since 5.3.2 */ @@ -783,7 +795,7 @@ public class Convert { try { return compositeConverter.convert(type, value, defaultValue); } catch (final Exception e) { - if(quietly){ + if (quietly) { return defaultValue; } throw e; @@ -791,6 +803,7 @@ public class Convert { } // ----------------------------------------------------------------------- 全角半角转换 + /** * 半角转全角 * @@ -804,12 +817,12 @@ public class Convert { /** * 半角转全角,{@code null}返回{@code null} * - * @param input String + * @param input String * @param notConvertSet 不替换的字符集合 * @return 全角字符串,{@code null}返回{@code null} */ public static String toSBC(final String input, final Set notConvertSet) { - if(StrUtil.isEmpty(input)){ + if (StrUtil.isEmpty(input)) { return input; } final char[] c = input.toCharArray(); @@ -841,13 +854,13 @@ public class Convert { /** * 替换全角为半角 * - * @param text 文本 + * @param text 文本 * @param notConvertSet 不替换的字符集合 * @return 替换后的字符 */ @SuppressWarnings("UnnecessaryUnicodeEscape") public static String toDBC(final String text, final Set notConvertSet) { - if(StrUtil.isBlank(text)) { + if (StrUtil.isBlank(text)) { return text; } final char[] c = text.toCharArray(); @@ -869,10 +882,11 @@ public class Convert { } // --------------------------------------------------------------------- hex + /** * 字符串转换成十六进制字符串,结果为小写 * - * @param str 待转换的ASCII字符串 + * @param str 待转换的ASCII字符串 * @param charset 编码 * @return 16进制字符串 * @see HexUtil#encodeStr(String, Charset) @@ -906,7 +920,7 @@ public class Convert { /** * 十六进制转换字符串 * - * @param hexStr Byte字符串(Byte之间无分隔符 如:[616C6B]) + * @param hexStr Byte字符串(Byte之间无分隔符 如:[616C6B]) * @param charset 编码 {@link Charset} * @return 对应的字符串 * @see HexUtil#decodeStr(String, Charset) @@ -942,9 +956,9 @@ public class Convert { * 给定字符串转换字符编码
* 如果参数为空,则返回原字符串,不报错。 * - * @param str 被转码的字符串 + * @param str 被转码的字符串 * @param sourceCharset 原字符集 - * @param destCharset 目标字符集 + * @param destCharset 目标字符集 * @return 转换后的字符串 * @see CharsetUtil#convert(String, String, String) */ @@ -960,8 +974,8 @@ public class Convert { * 转换时间单位 * * @param sourceDuration 时长 - * @param sourceUnit 源单位 - * @param destUnit 目标单位 + * @param sourceUnit 源单位 + * @param destUnit 目标单位 * @return 目标单位的时长 */ public static long convertTime(final long sourceDuration, final TimeUnit sourceUnit, final TimeUnit destUnit) { @@ -971,13 +985,14 @@ public class Convert { } // --------------------------------------------------------------- 原始包装类型转换 + /** * 原始类转为包装类,非原始类返回原类 * - * @see BasicType#wrap(Class) * @param clazz 原始类 * @return 包装类 * @see BasicType#wrap(Class) + * @see BasicType#wrap(Class) */ public static Class wrap(final Class clazz) { return BasicType.wrap(clazz); @@ -986,16 +1001,17 @@ public class Convert { /** * 包装类转为原始类,非包装类返回原类 * - * @see BasicType#unWrap(Class) * @param clazz 包装类 * @return 原始类 * @see BasicType#unWrap(Class) + * @see BasicType#unWrap(Class) */ public static Class unWrap(final Class clazz) { return BasicType.unWrap(clazz); } // -------------------------------------------------------------------------- 数字和英文转换 + /** * 将阿拉伯数字转为英文表达方式 * @@ -1025,7 +1041,7 @@ public class Convert { /** * 将阿拉伯数字转为中文表达方式 * - * @param number 数字 + * @param number 数字 * @param isUseTraditional 是否使用繁体字(金额形式) * @return 中文 * @since 3.2.3 @@ -1047,7 +1063,7 @@ public class Convert { * @return 数字 * @since 5.6.0 */ - public static BigDecimal chineseToNumber(final String number){ + public static BigDecimal chineseToNumber(final String number) { return ChineseNumberParser.parseFromChineseNumber(number); } @@ -1059,7 +1075,7 @@ public class Convert { * @since 3.2.3 */ public static String digitToChinese(final Number n) { - if(null == n) { + if (null == n) { return "零"; } return ChineseNumberFormatter.of() @@ -1071,18 +1087,19 @@ public class Convert { /** * 中文大写数字金额转换为数字,返回结果以元为单位的BigDecimal类型数字 * 如: - * “陆万柒仟伍佰伍拾陆元叁角贰分”返回“67556.32” - * “叁角贰分”返回“0.32” + * “陆万柒仟伍佰伍拾陆元叁角贰分”返回“67556.32” + * “叁角贰分”返回“0.32” * * @param chineseMoneyAmount 中文大写数字金额 * @return 返回结果以元为单位的BigDecimal类型数字 * @since 5.8.5 */ - public static BigDecimal chineseMoneyToNumber(final String chineseMoneyAmount){ + public static BigDecimal chineseMoneyToNumber(final String chineseMoneyAmount) { return ChineseNumberParser.parseFromChineseMoney(chineseMoneyAmount); } // -------------------------------------------------------------------------- 数字转换 + /** * int转byte * diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/date/BetweenFormatter.java b/hutool-core/src/main/java/org/dromara/hutool/core/date/BetweenFormatter.java index 29727ab75..7d4e60622 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/date/BetweenFormatter.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/date/BetweenFormatter.java @@ -228,7 +228,7 @@ public class BetweenFormatter implements Serializable { * @return this */ public BetweenFormatter setSeparator(final String separator) { - this.separator = StrUtil.emptyIfNull(separator); + this.separator = StrUtil.toStringOrEmpty(separator); return this; } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/date/CalendarUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/date/CalendarUtil.java index 17c7c9d7d..32f3fadb0 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/date/CalendarUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/date/CalendarUtil.java @@ -799,11 +799,13 @@ public class CalendarUtil { * @since 5.7.14 */ public static Calendar parse(final CharSequence str, final boolean lenient, final PositionDateParser parser) { + Assert.notBlank(str, "Date str must be not blank!"); + Assert.notNull(parser, "Parser must be not null!"); final Calendar calendar = Calendar.getInstance(parser.getTimeZone(), parser.getLocale()); calendar.clear(); calendar.setLenient(lenient); - return parser.parse(StrUtil.str(str), new ParsePosition(0), calendar) ? calendar : null; + return parser.parse(str.toString(), new ParsePosition(0), calendar) ? calendar : null; } // endregion diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/resource/CharSequenceResource.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/resource/CharSequenceResource.java index 7e2a8e72c..ef605604e 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/io/resource/CharSequenceResource.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/resource/CharSequenceResource.java @@ -69,7 +69,7 @@ public class CharSequenceResource implements Resource, Serializable { @Override public String getName() { - return StrUtil.str(this.name); + return StrUtil.toString(this.name); } @Override diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/resource/ResourceUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/resource/ResourceUtil.java index 37a91cccd..5b35b8d8a 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/io/resource/ResourceUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/resource/ResourceUtil.java @@ -225,7 +225,7 @@ public class ResourceUtil { * @return {@link URL} */ public static URL getResourceUrl(String resource, final Class baseClass) { - resource = StrUtil.emptyIfNull(resource); + resource = StrUtil.toStringOrEmpty(resource); return (null != baseClass) ? baseClass.getResource(resource) : ClassLoaderUtil.getClassLoader().getResource(resource); } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/lang/Validator.java b/hutool-core/src/main/java/org/dromara/hutool/core/lang/Validator.java index 7dfd4f40c..0b6a5728f 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/lang/Validator.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/lang/Validator.java @@ -893,7 +893,7 @@ public class Validator { return false; } try { - new java.net.URL(StrUtil.str(value)); + new java.net.URL(value.toString()); } catch (final MalformedURLException e) { return false; } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlPath.java b/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlPath.java index cd8e3caa3..1994ecd31 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlPath.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlPath.java @@ -32,7 +32,7 @@ import java.util.List; */ public class UrlPath { - private List segments; + private List segments; private boolean withEngTag; /** @@ -72,7 +72,7 @@ public class UrlPath { * * @return 节点列表 */ - public List getSegments() { + public List getSegments() { return ObjUtil.defaultIfNull(this.segments, ListUtil.empty()); } @@ -82,7 +82,7 @@ public class UrlPath { * @param index 节点位置 * @return 节点,无节点或者越界返回null */ - public String getSegment(final int index) { + public CharSequence getSegment(final int index) { if (null == this.segments || index >= this.segments.size()) { return null; } @@ -154,7 +154,7 @@ public class UrlPath { } final StringBuilder builder = new StringBuilder(); - for (final String segment : segments) { + for (final CharSequence segment : segments) { // https://www.ietf.org/rfc/rfc3986.html#section-3.3 // 此处Path中是允许有`:`的,之前理解有误,应该是相对URI的第一个segment中不允许有`:` builder.append(CharUtil.SLASH).append(RFC3986.SEGMENT.encode(segment, charset)); @@ -189,11 +189,10 @@ public class UrlPath { this.segments = new LinkedList<>(); } - final String seg = StrUtil.str(segment); if (before) { - this.segments.add(0, seg); + this.segments.add(0, segment); } else { - this.segments.add(seg); + this.segments.add(segment); } } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlQuery.java b/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlQuery.java index b7cfb466f..541565b85 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlQuery.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlQuery.java @@ -392,7 +392,7 @@ public class UrlQuery { final boolean isFormUrlEncoded = EncodeMode.FORM_URL_ENCODED == this.encodeMode; if (null != key) { final String actualKey = UrlDecoder.decode(key, charset, isFormUrlEncoded); - this.query.put(actualKey, StrUtil.emptyIfNull(UrlDecoder.decode(value, charset, isFormUrlEncoded))); + this.query.put(actualKey, StrUtil.toStringOrEmpty(UrlDecoder.decode(value, charset, isFormUrlEncoded))); } else if (null != value) { // name为空,value作为name,value赋值null this.query.put(UrlDecoder.decode(value, charset, isFormUrlEncoded), null); diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlQueryUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlQueryUtil.java index 75d3184fe..37f2dbf49 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlQueryUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlQueryUtil.java @@ -213,9 +213,11 @@ public class UrlQueryUtil { final Map> params = new LinkedHashMap<>(); queryMap.forEach((key, value) -> { - final List values = params.computeIfAbsent(StrUtil.str(key), k -> new ArrayList<>(1)); - // 一般是一个参数 - values.add(StrUtil.str(value)); + if(null != key && null != value){ + final List values = params.computeIfAbsent(key.toString(), k -> new ArrayList<>(1)); + // 一般是一个参数 + values.add(key.toString()); + } }); return params; } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlUtil.java index f9d111c83..1a8611044 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlUtil.java @@ -531,7 +531,7 @@ public class UrlUtil { if (isEncodePath) { path = RFC3986.PATH.encode(path, CharsetUtil.UTF_8); } - return protocol + domain + StrUtil.emptyIfNull(path) + StrUtil.emptyIfNull(params); + return protocol + domain + StrUtil.toStringOrEmpty(path) + StrUtil.toStringOrEmpty(params); } // endregion diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ClassScanner.java b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ClassScanner.java index 6cde0dd38..4040979c6 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ClassScanner.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ClassScanner.java @@ -231,7 +231,7 @@ public class ClassScanner implements Serializable { * @param charset 编码 */ public ClassScanner(String packageName, final Predicate> classPredicate, final Charset charset) { - packageName = StrUtil.emptyIfNull(packageName); + packageName = StrUtil.toStringOrEmpty(packageName); this.packageName = packageName; this.packageNameWithDot = StrUtil.addSuffixIfNot(packageName, StrUtil.DOT); this.packageDirName = packageName.replace(CharUtil.DOT, File.separatorChar); diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/regex/ReUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/regex/ReUtil.java index ecf2697a2..5280c9d38 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/regex/ReUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/regex/ReUtil.java @@ -381,8 +381,8 @@ public class ReUtil { * @return 删除后剩余的内容 */ public static String delFirst(final String regex, final CharSequence content) { - if (ArrayUtil.hasBlank(regex, content)) { - return StrUtil.str(content); + if (StrUtil.hasEmpty(regex, content)) { + return StrUtil.toStringOrNull(content); } final Pattern pattern = PatternPool.get(regex, Pattern.DOTALL); @@ -411,7 +411,7 @@ public class ReUtil { */ public static String replaceFirst(final Pattern pattern, final CharSequence content, final String replacement) { if (null == pattern || StrUtil.isEmpty(content)) { - return StrUtil.str(content); + return StrUtil.toStringOrNull(content); } return pattern.matcher(content).replaceFirst(replacement); @@ -426,8 +426,8 @@ public class ReUtil { * @since 5.6.5 */ public static String delLast(final String regex, final CharSequence str) { - if (ArrayUtil.hasBlank(regex, str)) { - return StrUtil.str(str); + if (StrUtil.isEmpty(regex) || StrUtil.isEmpty(str)) { + return StrUtil.toStringOrNull(str); } final Pattern pattern = PatternPool.get(regex, Pattern.DOTALL); @@ -450,7 +450,7 @@ public class ReUtil { } } - return StrUtil.str(str); + return StrUtil.toStringOrNull(str); } /** @@ -462,7 +462,7 @@ public class ReUtil { */ public static String delAll(final String regex, final CharSequence content) { if (StrUtil.hasEmpty(regex, content)) { - return StrUtil.str(content); + return StrUtil.toStringOrNull(content); } final Pattern pattern = PatternPool.get(regex, Pattern.DOTALL); @@ -478,7 +478,7 @@ public class ReUtil { */ public static String delAll(final Pattern pattern, final CharSequence content) { if (null == pattern || StrUtil.isEmpty(content)) { - return StrUtil.str(content); + return StrUtil.toStringOrNull(content); } return pattern.matcher(content).replaceAll(StrUtil.EMPTY); @@ -493,7 +493,7 @@ public class ReUtil { */ public static String delPre(final String regex, final CharSequence content) { if (null == content || null == regex) { - return StrUtil.str(content); + return StrUtil.toStringOrNull(content); } final Pattern pattern = PatternPool.get(regex, Pattern.DOTALL); @@ -508,15 +508,14 @@ public class ReUtil { * @return 删除前缀后的新内容 */ public static String delPre(final Pattern pattern, final CharSequence content) { - if (null == content || null == pattern) { - return StrUtil.str(content); + if (null != pattern && StrUtil.isNotEmpty(content)) { + final Matcher matcher = pattern.matcher(content); + if (matcher.find()) { + return StrUtil.sub(content, matcher.end(), content.length()); + } } - final Matcher matcher = pattern.matcher(content); - if (matcher.find()) { - return StrUtil.sub(content, matcher.end(), content.length()); - } - return StrUtil.str(content); + return StrUtil.toStringOrNull(content); } /** @@ -873,32 +872,28 @@ public class ReUtil { * @since 3.0.4 */ public static String replaceAll(final CharSequence content, final Pattern pattern, final String replacementTemplate) { - if (StrUtil.isEmpty(content)) { - return StrUtil.str(content); + if(null != pattern && StrUtil.isNotEmpty(content) && StrUtil.isNotEmpty(replacementTemplate)){ + final Matcher matcher = pattern.matcher(content); + boolean result = matcher.find(); + if (result) { + final Set varNums = findAll(PatternPool.GROUP_VAR, replacementTemplate, 1, + new TreeSet<>(StrLengthComparator.INSTANCE.reversed())); + final StringBuffer sb = new StringBuffer(); + do { + String replacement = replacementTemplate; + for (final String var : varNums) { + final int group = Integer.parseInt(var); + replacement = replacement.replace("$" + var, matcher.group(group)); + } + matcher.appendReplacement(sb, escape(replacement)); + result = matcher.find(); + } while (result); + matcher.appendTail(sb); + return sb.toString(); + } } - // replacementTemplate字段不能为null,否则无法抉择如何处理结果 - Assert.notNull(replacementTemplate, "ReplacementTemplate must be not null !"); - - final Matcher matcher = pattern.matcher(content); - boolean result = matcher.find(); - if (result) { - final Set varNums = findAll(PatternPool.GROUP_VAR, replacementTemplate, 1, - new TreeSet<>(StrLengthComparator.INSTANCE.reversed())); - final StringBuffer sb = new StringBuffer(); - do { - String replacement = replacementTemplate; - for (final String var : varNums) { - final int group = Integer.parseInt(var); - replacement = replacement.replace("$" + var, matcher.group(group)); - } - matcher.appendReplacement(sb, escape(replacement)); - result = matcher.find(); - } while (result); - matcher.appendTail(sb); - return sb.toString(); - } - return StrUtil.str(content); + return StrUtil.toStringOrNull(replacementTemplate); } /** @@ -933,9 +928,13 @@ public class ReUtil { * @return 替换后的字符串 * @since 4.2.2 */ - public static String replaceAll(final CharSequence str, final Pattern pattern, final SerFunction replaceFun) { - if (StrUtil.isEmpty(str)) { - return StrUtil.str(str); + public static String replaceAll(final CharSequence str, final Pattern pattern, SerFunction replaceFun) { + if (null == pattern || StrUtil.isEmpty(str)) { + return StrUtil.toStringOrNull(str); + } + + if(null == replaceFun){ + replaceFun = Matcher::group; } final Matcher matcher = pattern.matcher(str); @@ -970,7 +969,7 @@ public class ReUtil { */ public static String escape(final CharSequence content) { if (StrUtil.isBlank(content)) { - return StrUtil.str(content); + return StrUtil.toStringOrNull(content); } final StringBuilder builder = new StringBuilder(); diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/text/CharSequenceUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/text/CharSequenceUtil.java index fb9dbf364..4d044af86 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/text/CharSequenceUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/text/CharSequenceUtil.java @@ -30,7 +30,6 @@ import org.dromara.hutool.core.text.replacer.SearchReplacer; import org.dromara.hutool.core.text.split.SplitUtil; import org.dromara.hutool.core.util.ByteUtil; import org.dromara.hutool.core.util.CharsetUtil; -import org.dromara.hutool.core.util.ObjUtil; import java.nio.ByteBuffer; import java.nio.CharBuffer; @@ -94,28 +93,46 @@ public class CharSequenceUtil extends StrValidator { */ public static final String SPACE = " "; + // region toString + /** - * {@link CharSequence} 转为字符串,null安全 + * 调用对象的toString方法,null会返回“null” * - * @param cs {@link CharSequence} + * @param obj 对象 * @return 字符串 + * @since 4.1.3 + * @see String#valueOf(Object) */ - public static String str(final CharSequence cs) { - return null == cs ? null : cs.toString(); + public static String toString(final Object obj) { + return String.valueOf(obj); } + /** + * 调用对象的toString方法,{@code null}会返回{@code null} + * + * @param obj 对象 + * @return 字符串 or {@code null} + * @since 5.7.17 + */ + public static String toStringOrNull(final Object obj) { + return null == obj ? null : obj.toString(); + } + + /** + * 调用对象的toString方法,{@code null}会返回空字符串 "" + * + * @param obj 对象 + * @return {@link String } + * @author Junwei Xu + */ + public static String toStringOrEmpty(final Object obj) { + // obj为空时, 返回 null 或 "null" 都不适用部分场景, 此处返回 "" 空字符串 + return null == obj ? EMPTY : obj.toString(); + } + + // endregion + // region ----- defaultIf - - /** - * 当给定字符串为null时,转换为Empty - * - * @param str 被转换的字符串 - * @return 转换后的字符串 - */ - public static String emptyIfNull(final CharSequence str) { - return ObjUtil.defaultIfNull(str, EMPTY).toString(); - } - /** * 当给定字符串为空字符串时,转换为{@code null} * @@ -215,9 +232,9 @@ public class CharSequenceUtil extends StrValidator { * 注意,和{@link String#trim()}不同,此方法使用{@link CharUtil#isBlankChar(char)} 来判定空白, 因而可以除去英文字符集之外的其它空白,如中文空格。 *
    *
  • 去除字符串空格罗列相关如下:
  • - *
  • {@link StrUtil#trimPrefix(CharSequence)}去除头部空格
  • - *
  • {@link StrUtil#trimSuffix(CharSequence)}去除尾部空格
  • - *
  • {@link StrUtil#cleanBlank(CharSequence)}去除头部、尾部、中间空格
  • + *
  • {@link #trimPrefix(CharSequence)}去除头部空格
  • + *
  • {@link #trimSuffix(CharSequence)}去除尾部空格
  • + *
  • {@link #cleanBlank(CharSequence)}去除头部、尾部、中间空格
  • *
* *
@@ -653,7 +670,7 @@ public class CharSequenceUtil extends StrValidator {
 	 *     
  • str 不是 null,testChars 是 null,直接返回 false
  • * *
    {@code
    -	 *   StrUtil.containsOnly("asdas", 'a', 'd', 's','l');   --> true
    +	 *   CharSequenceUtil.containsOnly("asdas", 'a', 'd', 's','l');   --> true
     	 * }
    * * @param str 字符串 @@ -1035,7 +1052,7 @@ public class CharSequenceUtil extends StrValidator { public static String removeAll(final CharSequence str, final CharSequence strToRemove) { // strToRemove如果为空, 也不用继续后面的逻辑 if (isEmpty(str) || isEmpty(strToRemove)) { - return str(str); + return toStringOrNull(str); } return str.toString().replace(strToRemove, EMPTY); } @@ -1050,7 +1067,7 @@ public class CharSequenceUtil extends StrValidator { * @since 5.3.8 */ public static String removeAny(final CharSequence str, final CharSequence... strsToRemove) { - String result = str(str); + String result = toStringOrNull(str); if (isNotEmpty(str)) { for (final CharSequence strToRemove : strsToRemove) { result = removeAll(result, strToRemove); @@ -1068,8 +1085,8 @@ public class CharSequenceUtil extends StrValidator { * @since 4.2.2 */ public static String removeAll(final CharSequence str, final char... chars) { - if (null == str || ArrayUtil.isEmpty(chars)) { - return str(str); + if (StrUtil.isEmpty(str) || ArrayUtil.isEmpty(chars)) { + return toStringOrNull(str); } return filter(str, (c) -> !ArrayUtil.contains(chars, c)); } @@ -1157,7 +1174,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String removePrefix(final CharSequence str, final CharSequence prefix, final boolean ignoreCase) { if (isEmpty(str) || isEmpty(prefix)) { - return str(str); + return toStringOrNull(str); } final String str2 = str.toString(); @@ -1176,7 +1193,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String removeSuffix(final CharSequence str, final CharSequence suffix) { if (isEmpty(str) || isEmpty(suffix)) { - return str(str); + return toStringOrNull(str); } final String str2 = str.toString(); @@ -1206,7 +1223,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String removeSuffixIgnoreCase(final CharSequence str, final CharSequence suffix) { if (isEmpty(str) || isEmpty(suffix)) { - return str(str); + return toStringOrNull(str); } final String str2 = str.toString(); @@ -1257,7 +1274,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String strip(final CharSequence str, final CharSequence prefix, final CharSequence suffix) { if (isEmpty(str)) { - return str(str); + return toStringOrNull(str); } int from = 0; @@ -1297,7 +1314,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String stripIgnoreCase(final CharSequence str, final CharSequence prefix, final CharSequence suffix) { if (isEmpty(str)) { - return str(str); + return toStringOrNull(str); } int from = 0; int to = str.length(); @@ -1384,7 +1401,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String sub(final CharSequence str, int fromIndexInclude, int toIndexExclude) { if (isEmpty(str)) { - return str(str); + return toStringOrNull(str); } final int len = str.length(); @@ -1429,7 +1446,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String subByCodePoint(final CharSequence str, final int fromIndex, final int toIndex) { if (isEmpty(str)) { - return str(str); + return toStringOrNull(str); } if (fromIndex < 0 || fromIndex > toIndex) { @@ -1471,7 +1488,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String subPreGbk(final CharSequence str, int len, final boolean halfUp) { if (isEmpty(str)) { - return str(str); + return toStringOrNull(str); } int counterOfDoubleByte = 0; @@ -2214,7 +2231,7 @@ public class CharSequenceUtil extends StrValidator { * @return 包装后的字符串 */ public static String wrap(final CharSequence str, final CharSequence prefix, final CharSequence suffix) { - return emptyIfNull(prefix).concat(emptyIfNull(str)).concat(emptyIfNull(suffix)); + return toStringOrEmpty(prefix).concat(toStringOrEmpty(str)).concat(toStringOrEmpty(suffix)); } /** @@ -2226,7 +2243,7 @@ public class CharSequenceUtil extends StrValidator { * @return 包装后的字符串 */ public static String wrap(final CharSequence str, final char prefix, final char suffix) { - return prefix + emptyIfNull(str) + suffix; + return prefix + toStringOrEmpty(str) + suffix; } /** @@ -2347,7 +2364,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String unWrap(final CharSequence str, final char prefix, final char suffix) { if (isEmpty(str)) { - return str(str); + return toStringOrNull(str); } if (str.charAt(0) == prefix && str.charAt(str.length() - 1) == suffix) { return sub(str, 1, str.length() - 1); @@ -2595,7 +2612,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String center(CharSequence str, final int size, final char padChar) { if (str == null || size <= 0) { - return str(str); + return toStringOrNull(str); } final int strLen = str.length(); final int pads = size - strLen; @@ -2629,7 +2646,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String center(CharSequence str, final int size, CharSequence padStr) { if (str == null || size <= 0) { - return str(str); + return toStringOrNull(str); } if (isEmpty(padStr)) { padStr = SPACE; @@ -2796,7 +2813,7 @@ public class CharSequenceUtil extends StrValidator { * @since 4.0.2 */ public static int compareVersion(final CharSequence version1, final CharSequence version2) { - return VersionComparator.INSTANCE.compare(str(version1), str(version2)); + return VersionComparator.INSTANCE.compare(toStringOrNull(version1), toStringOrNull(version2)); } // endregion @@ -2842,7 +2859,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String appendIfMissing(final CharSequence str, final CharSequence suffix, final boolean ignoreCase, final CharSequence... testSuffixes) { if (str == null || isEmpty(suffix) || endWith(str, suffix, ignoreCase)) { - return str(str); + return toStringOrNull(str); } if (ArrayUtil.isNotEmpty(testSuffixes)) { for (final CharSequence testSuffix : testSuffixes) { @@ -2894,7 +2911,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String prependIfMissing(final CharSequence str, final CharSequence prefix, final boolean ignoreCase, final CharSequence... prefixes) { if (str == null || isEmpty(prefix) || startWith(str, prefix, ignoreCase)) { - return str(str); + return toStringOrNull(str); } if (ArrayUtil.isNotEmpty(prefixes)) { for (final CharSequence s : prefixes) { @@ -2920,11 +2937,11 @@ public class CharSequenceUtil extends StrValidator { */ public static String replaceFirst(final CharSequence str, final CharSequence searchStr, final CharSequence replacedStr, final boolean ignoreCase) { if (isEmpty(str)) { - return str(str); + return toStringOrNull(str); } final int startInclude = indexOf(str, searchStr, 0, ignoreCase); if (INDEX_NOT_FOUND == startInclude) { - return str(str); + return toStringOrNull(str); } return replaceByCodePoint(str, startInclude, startInclude + searchStr.length(), replacedStr); } @@ -2940,11 +2957,11 @@ public class CharSequenceUtil extends StrValidator { */ public static String replaceLast(final CharSequence str, final CharSequence searchStr, final CharSequence replacedStr, final boolean ignoreCase) { if (isEmpty(str)) { - return str(str); + return toStringOrNull(str); } final int lastIndex = lastIndexOf(str, searchStr, str.length(), ignoreCase); if (INDEX_NOT_FOUND == lastIndex) { - return str(str); + return toStringOrNull(str); } return replace(str, lastIndex, searchStr, replacedStr, ignoreCase); } @@ -3003,7 +3020,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String replace(final CharSequence str, final int fromIndex, final CharSequence searchStr, final CharSequence replacement, final boolean ignoreCase) { if (isEmpty(str) || isEmpty(searchStr)) { - return str(str); + return toStringOrNull(str); } return new SearchReplacer(fromIndex, searchStr, replacement, ignoreCase).apply(str); } @@ -3108,7 +3125,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String replaceChars(final CharSequence str, final String chars, final CharSequence replacedStr) { if (isEmpty(str) || isEmpty(chars)) { - return str(str); + return toStringOrNull(str); } return replaceChars(str, chars.toCharArray(), replacedStr); } @@ -3124,7 +3141,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String replaceChars(final CharSequence str, final char[] chars, final CharSequence replacedStr) { if (isEmpty(str) || ArrayUtil.isEmpty(chars)) { - return str(str); + return toStringOrNull(str); } final Set set = new HashSet<>(chars.length); @@ -3144,8 +3161,8 @@ public class CharSequenceUtil extends StrValidator { /** * 按照给定逻辑替换指定位置的字符,如字符大小写转换等 * - * @param str 字符串 - * @param index 位置,-1表示最后一个字符 + * @param str 字符串 + * @param index 位置,-1表示最后一个字符 * @param operator 替换逻辑,给定原字符,返回新字符 * @return 替换后的字符串 * @since 6.0.0 @@ -3281,11 +3298,11 @@ public class CharSequenceUtil extends StrValidator { final int factor, final boolean appendDots) { //字符数*速算因子<=最大字节数 if (str == null || str.length() * factor <= maxBytesLength) { - return str(str); + return toStringOrNull(str); } final byte[] sba = ByteUtil.toBytes(str, charset); if (sba.length <= maxBytesLength) { - return str(str); + return toStringOrNull(str); } //限制字节数 final int limitBytes; @@ -3430,7 +3447,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String filter(final CharSequence str, final Predicate predicate) { if (str == null || predicate == null) { - return str(str); + return toStringOrNull(str); } final int len = str.length(); @@ -3638,7 +3655,7 @@ public class CharSequenceUtil extends StrValidator { public static String concat(final boolean isNullToEmpty, final CharSequence... strs) { final StringBuilder sb = new StringBuilder(); for (final CharSequence str : strs) { - sb.append(isNullToEmpty ? emptyIfNull(str) : str); + sb.append(isNullToEmpty ? toStringOrEmpty(str) : str); } return sb.toString(); } @@ -3694,6 +3711,7 @@ public class CharSequenceUtil extends StrValidator { } // region ----- join + /** * 以 conjunction 为分隔符将多个对象转换为字符串 * @@ -3747,7 +3765,7 @@ public class CharSequenceUtil extends StrValidator { */ public static String move(final CharSequence str, final int startInclude, final int endExclude, int moveLength) { if (isEmpty(str)) { - return str(str); + return toStringOrNull(str); } final int len = str.length(); if (Math.abs(moveLength) > len) { @@ -3768,7 +3786,7 @@ public class CharSequenceUtil extends StrValidator { .append(str.subSequence(startAfterMove, startInclude))// .append(str.subSequence(endExclude, str.length())); } else { - return str(str); + return toStringOrNull(str); } return strBuilder.toString(); } @@ -3865,4 +3883,19 @@ public class CharSequenceUtil extends StrValidator { } return str1.subSequence(str1Index + 1, str1.length()); } + + /** + * 将字符串转换为字符数组 + * + * @param str 字符串 + * @param isCodePoint 是否为Unicode码点(即支持emoji等多char字符) + * @return 字符数组 + * @since 6.0.0 + */ + public static int[] toChars(final CharSequence str, final boolean isCodePoint) { + if (null == str) { + return null; + } + return (isCodePoint ? str.codePoints() : str.chars()).toArray(); + } } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/text/StrJoiner.java b/hutool-core/src/main/java/org/dromara/hutool/core/text/StrJoiner.java index 413742bcc..68d427c5b 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/text/StrJoiner.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/text/StrJoiner.java @@ -14,6 +14,7 @@ package org.dromara.hutool.core.text; import org.dromara.hutool.core.collection.iter.ArrayIter; import org.dromara.hutool.core.collection.iter.IterUtil; +import org.dromara.hutool.core.convert.Convert; import org.dromara.hutool.core.io.IORuntimeException; import org.dromara.hutool.core.array.ArrayUtil; import org.dromara.hutool.core.util.ObjUtil; @@ -234,7 +235,7 @@ public class StrJoiner implements Appendable, Serializable { final Map.Entry entry = (Map.Entry) obj; append(entry.getKey()).append(entry.getValue()); } else { - append(ObjUtil.toString(obj)); + append(Convert.toStr(obj)); } return this; } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/text/StrTrimer.java b/hutool-core/src/main/java/org/dromara/hutool/core/text/StrTrimer.java index 1eae4a3a3..94bc58974 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/text/StrTrimer.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/text/StrTrimer.java @@ -56,7 +56,7 @@ public class StrTrimer implements UnaryOperator, Serializable { @Override public String apply(final CharSequence str) { if (StrUtil.isEmpty(str)) { - return StrUtil.str(str); + return StrUtil.toStringOrNull(str); } final int length = str.length(); diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/text/StrUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/text/StrUtil.java index 852f8e874..e4d84f06d 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/text/StrUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/text/StrUtil.java @@ -241,41 +241,6 @@ public class StrUtil extends CharSequenceUtil implements StrPool { } // endregion - /** - * 调用对象的toString方法,null会返回“null” - * - * @param obj 对象 - * @return 字符串 - * @since 4.1.3 - * @see String#valueOf(Object) - */ - public static String toString(final Object obj) { - return String.valueOf(obj); - } - - /** - * 调用对象的toString方法,{@code null}会返回{@code null} - * - * @param obj 对象 - * @return 字符串 or {@code null} - * @since 5.7.17 - */ - public static String toStringOrNull(final Object obj) { - return null == obj ? null : obj.toString(); - } - - /** - * 调用对象的toString方法,{@code null}会返回空字符串 "" - * - * @param obj 对象 - * @return {@link String } - * @author Junwei Xu - */ - public static String toStringOrEmpty(final Object obj) { - // obj为空时, 返回 null 或 "null" 都不适用部分场景, 此处返回 "" 空字符串 - return null == obj ? EMPTY : obj.toString(); - } - /** * 创建StringBuilder对象 * diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/text/StrValidator.java b/hutool-core/src/main/java/org/dromara/hutool/core/text/StrValidator.java index 8c2204680..5b8f0add3 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/text/StrValidator.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/text/StrValidator.java @@ -182,6 +182,68 @@ public class StrValidator { return !isEmpty(str); } + /** + *

    指定字符串数组中,是否包含空字符串。

    + *

    如果指定的字符串数组的长度为 0,或者其中的任意一个元素是空字符串,则返回 true。

    + *
    + * + *

    例:

    + *
      + *
    • {@code hasBlank() // true}
    • + *
    • {@code hasBlank("", null, " ") // true}
    • + *
    • {@code hasBlank("123", " ") // true}
    • + *
    • {@code hasBlank("123", "abc") // false}
    • + *
    + * + *

    注意:该方法与 {@link #isAllBlank(CharSequence...)} 的区别在于:

    + *
      + *
    • hasBlank(CharSequence...) 等价于 {@code isBlank(...) || isBlank(...) || ...}
    • + *
    • {@link #isAllBlank(CharSequence...)} 等价于 {@code isBlank(...) && isBlank(...) && ...}
    • + *
    + * + * @param strs 字符串列表 + * @return 是否包含空字符串 + */ + public static boolean hasBlank(final CharSequence... strs) { + return ArrayUtil.hasBlank(strs); + } + + /** + * 是否存都不为{@code null}或空对象或空白符的对象,通过{@link #hasBlank(CharSequence...)} 判断元素 + * + * @param args 被检查的对象,一个或者多个 + * @return 是否都不为空 + */ + public static boolean isAllNotBlank(final CharSequence... args) { + return ArrayUtil.isAllNotBlank(args); + } + + /** + *

    指定字符串数组中的元素,是否全部为空字符串。

    + *

    如果指定的字符串数组的长度为 0,或者所有元素都是空字符串,则返回 true。

    + *
    + * + *

    例:

    + *
      + *
    • {@code isAllBlank() // true}
    • + *
    • {@code isAllBlank("", null, " ") // true}
    • + *
    • {@code isAllBlank("123", " ") // false}
    • + *
    • {@code isAllBlank("123", "abc") // false}
    • + *
    + * + *

    注意:该方法与 {@link #hasBlank(CharSequence...)} 的区别在于:

    + *
      + *
    • {@link #hasBlank(CharSequence...)} 等价于 {@code isBlank(...) || isBlank(...) || ...}
    • + *
    • isAllBlank(CharSequence...) 等价于 {@code isBlank(...) && isBlank(...) && ...}
    • + *
    + * + * @param strs 字符串列表 + * @return 所有字符串是否为空白 + */ + public static boolean isAllBlank(final CharSequence... strs) { + return ArrayUtil.isAllBlank(strs); + } + /** *

    是否包含空字符串。

    *

    如果指定的字符串数组的长度为 0,或者其中的任意一个元素是空字符串,则返回 true。

    diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/text/escape/EscapeUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/text/escape/EscapeUtil.java index ae65b12b7..7963ed101 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/text/escape/EscapeUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/text/escape/EscapeUtil.java @@ -124,7 +124,7 @@ public class EscapeUtil { */ public static String escape(final CharSequence content, final Predicate filter) { if (StrUtil.isEmpty(content)) { - return StrUtil.str(content); + return StrUtil.toStringOrNull(content); } final StringBuilder tmp = new StringBuilder(content.length() * 6); diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/text/replacer/RangeReplacerByChar.java b/hutool-core/src/main/java/org/dromara/hutool/core/text/replacer/RangeReplacerByChar.java index 368013def..b6b5ef145 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/text/replacer/RangeReplacerByChar.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/text/replacer/RangeReplacerByChar.java @@ -46,11 +46,11 @@ public class RangeReplacerByChar extends StrReplacer { @Override public String apply(final CharSequence str) { if (StrUtil.isEmpty(str)) { - return StrUtil.str(str); + return StrUtil.toStringOrNull(str); } - final String originalStr = StrUtil.str(str); - final int[] chars = (isCodePoint ? originalStr.codePoints() : originalStr.chars()).toArray(); + final String originalStr = str.toString(); + final int[] chars = StrUtil.toChars(originalStr, this.isCodePoint); final int strLength = chars.length; final int beginInclude = this.beginInclude; diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/text/replacer/RangeReplacerByStr.java b/hutool-core/src/main/java/org/dromara/hutool/core/text/replacer/RangeReplacerByStr.java index 8f35afc48..862f662cc 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/text/replacer/RangeReplacerByStr.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/text/replacer/RangeReplacerByStr.java @@ -46,11 +46,11 @@ public class RangeReplacerByStr extends StrReplacer { @Override public String apply(final CharSequence str) { if (StrUtil.isEmpty(str)) { - return StrUtil.str(str); + return StrUtil.toStringOrNull(str); } - final String originalStr = StrUtil.str(str); - final int[] chars = (isCodePoint ? originalStr.codePoints() : originalStr.chars()).toArray(); + final String originalStr = str.toString(); + final int[] chars = StrUtil.toChars(originalStr, this.isCodePoint); final int strLength = chars.length; final int beginInclude = this.beginInclude; diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/text/replacer/SearchReplacer.java b/hutool-core/src/main/java/org/dromara/hutool/core/text/replacer/SearchReplacer.java index fefcad15a..b91dace6c 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/text/replacer/SearchReplacer.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/text/replacer/SearchReplacer.java @@ -46,20 +46,20 @@ public class SearchReplacer extends StrReplacer { this.fromIndex = Math.max(fromIndex, 0); this.searchStr = Assert.notEmpty(searchStr, "'searchStr' must be not empty!"); this.searchStrLength = searchStr.length(); - this.replacement = StrUtil.emptyIfNull(replacement); + this.replacement = StrUtil.toStringOrEmpty(replacement); this.ignoreCase = ignoreCase; } @Override public String apply(final CharSequence str) { if (StrUtil.isEmpty(str)) { - return StrUtil.str(str); + return StrUtil.toStringOrNull(str); } final int strLength = str.length(); if (strLength < this.searchStrLength) { // issue#I4M16G@Gitee - return StrUtil.str(str); + return StrUtil.toStringOrNull(str); } final int fromIndex = this.fromIndex; diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/util/ObjUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/util/ObjUtil.java index 03696bafd..68537f6b7 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/util/ObjUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/util/ObjUtil.java @@ -15,7 +15,6 @@ package org.dromara.hutool.core.util; import org.dromara.hutool.core.array.ArrayUtil; import org.dromara.hutool.core.collection.CollUtil; import org.dromara.hutool.core.collection.iter.IterUtil; -import org.dromara.hutool.core.convert.Convert; import org.dromara.hutool.core.exception.HutoolException; import org.dromara.hutool.core.io.SerializeUtil; import org.dromara.hutool.core.map.MapUtil; @@ -500,27 +499,4 @@ public class ObjUtil { public static Class getTypeArgument(final Object obj, final int index) { return ClassUtil.getTypeArgument(obj.getClass(), index); } - - /** - *

    将对象转为字符串 - *

      - *
    • 若对象为{@code null},则返回“null”;
    • - *
    • 若对象为{@link Map},则返回{@code Map.toString()};
    • - *
    • 若对象为其他类型,则调用{@link Convert#toStr(Object)}进行转换;
    • - *
    - * - * @param obj Bean对象 - * @return 转换后的字符串 - * @see Convert#toStr(Object) - * @since 3.2.0 - */ - public static String toString(final Object obj) { - if (null == obj) { - return StrUtil.NULL; - } - if (obj instanceof Map) { - return obj.toString(); - } - return Convert.toStr(obj); - } } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/xml/XmlUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/xml/XmlUtil.java index d2e29eace..f6e7c8d53 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/xml/XmlUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/xml/XmlUtil.java @@ -972,12 +972,12 @@ public class XmlUtil extends XmlConstants { * * @param doc {@link Document} * @param node 节点 - * @param text 文本内容 + * @param text 文本内容,{@code null}表示空节点 * @return 增加的子节点,即Text节点 * @since 5.3.0 */ private static Node appendText(final Document doc, final Node node, final CharSequence text) { - return node.appendChild(doc.createTextNode(StrUtil.str(text))); + return node.appendChild(doc.createTextNode(StrUtil.toStringOrEmpty(text))); } // ---------------------------------------------------------------------------------------- Private method end diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/util/ObjUtilTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/util/ObjUtilTest.java index fd3d6da43..f88bc81b2 100644 --- a/hutool-core/src/test/java/org/dromara/hutool/core/util/ObjUtilTest.java +++ b/hutool-core/src/test/java/org/dromara/hutool/core/util/ObjUtilTest.java @@ -15,6 +15,7 @@ package org.dromara.hutool.core.util; import org.dromara.hutool.core.collection.ListUtil; import lombok.EqualsAndHashCode; import lombok.RequiredArgsConstructor; +import org.dromara.hutool.core.convert.Convert; import org.dromara.hutool.core.util.ObjUtil; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -223,8 +224,8 @@ public class ObjUtilTest { @Test public void toStringTest() { - Assertions.assertEquals("null", ObjUtil.toString(null)); - Assertions.assertEquals(Collections.emptyMap().toString(), ObjUtil.toString(Collections.emptyMap())); + Assertions.assertEquals("null", Convert.toStrOrNullStr(null)); + Assertions.assertEquals(Collections.emptyMap().toString(), Convert.toStrOrNullStr(Collections.emptyMap())); Assertions.assertEquals("[1, 2]", Arrays.asList("1", "2").toString()); } diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/config/SettingConfigParser.java b/hutool-db/src/main/java/org/dromara/hutool/db/config/SettingConfigParser.java index 77cecbfb9..f1e19803e 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/config/SettingConfigParser.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/config/SettingConfigParser.java @@ -75,7 +75,7 @@ public class SettingConfigParser implements ConfigParser { @Override public DbConfig parse(final String group) { final Setting setting = this.setting; - final Setting subSetting = setting.getSetting(StrUtil.emptyIfNull(group)); + final Setting subSetting = setting.getSetting(StrUtil.toStringOrEmpty(group)); if (MapUtil.isEmpty(subSetting)) { throw new DbException("No config for group: [{}]", group); } diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/ds/DSPool.java b/hutool-db/src/main/java/org/dromara/hutool/db/ds/DSPool.java index 08e447353..88278fbf7 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/ds/DSPool.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/ds/DSPool.java @@ -167,7 +167,7 @@ public class DSPool implements Closeable { * @return {@link DSWrapper} 数据源包装 */ private DSWrapper createDSWrapper(final String group) { - final DbConfig dbConfig = this.configParser.parse(StrUtil.emptyIfNull(group)); + final DbConfig dbConfig = this.configParser.parse(StrUtil.toStringOrEmpty(group)); return DSWrapper.wrap(factory.createDataSource(dbConfig), dbConfig); } } diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/analysis/AnalysisEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/analysis/AnalysisEngine.java index b95f2e752..6bd133a9d 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/analysis/AnalysisEngine.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/analysis/AnalysisEngine.java @@ -46,7 +46,7 @@ public class AnalysisEngine implements TokenizerEngine { public Result parse(final CharSequence text) { final TokenStream stream; try { - stream = analyzer.tokenStream("text", StrUtil.str(text)); + stream = analyzer.tokenStream("text", StrUtil.toStringOrEmpty(text)); stream.reset(); } catch (final IOException e) { throw new TokenizerException(e); diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/ansj/AnsjEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/ansj/AnsjEngine.java index 6d1bd86e4..16125ecca 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/ansj/AnsjEngine.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/ansj/AnsjEngine.java @@ -48,7 +48,7 @@ public class AnsjEngine implements TokenizerEngine { @Override public Result parse(final CharSequence text) { - return new AnsjResult(analysis.parseStr(StrUtil.str(text))); + return new AnsjResult(analysis.parseStr(StrUtil.toStringOrEmpty(text))); } } diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/hanlp/HanLPEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/hanlp/HanLPEngine.java index e3bdc7ad0..c04518849 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/hanlp/HanLPEngine.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/hanlp/HanLPEngine.java @@ -48,7 +48,7 @@ public class HanLPEngine implements TokenizerEngine { @Override public Result parse(final CharSequence text) { - return new HanLPResult(this.seg.seg(StrUtil.str(text))); + return new HanLPResult(this.seg.seg(StrUtil.toStringOrEmpty(text))); } } diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/jcseg/JcsegEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/jcseg/JcsegEngine.java index cb67d6a05..9d6f21bf2 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/jcseg/JcsegEngine.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/jcseg/JcsegEngine.java @@ -60,7 +60,7 @@ public class JcsegEngine implements TokenizerEngine { // 依据给定的ADictionary和SegmenterConfig来创建ISegment final ISegment segment = ISegment.COMPLEX.factory.create(config, dic); try { - segment.reset(new StringReader(StrUtil.str(text))); + segment.reset(new StringReader(StrUtil.toStringOrEmpty(text))); } catch (final IOException e) { throw new TokenizerException(e); } diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/jieba/JiebaEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/jieba/JiebaEngine.java index b5a74cac6..c37069fe6 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/jieba/JiebaEngine.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/jieba/JiebaEngine.java @@ -51,7 +51,7 @@ public class JiebaEngine implements TokenizerEngine { @Override public Result parse(final CharSequence text) { - return new JiebaResult(jiebaSegmenter.process(StrUtil.str(text), mode)); + return new JiebaResult(jiebaSegmenter.process(StrUtil.toStringOrEmpty(text), mode)); } } diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/mynlp/MynlpEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/mynlp/MynlpEngine.java index 7fca5d9b4..cc922a3fb 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/mynlp/MynlpEngine.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/mynlp/MynlpEngine.java @@ -51,7 +51,7 @@ public class MynlpEngine implements TokenizerEngine { @Override public Result parse(final CharSequence text) { - final Sentence sentence = this.lexer.scan(StrUtil.str(text)); + final Sentence sentence = this.lexer.scan(StrUtil.toStringOrEmpty(text)); return new MynlpResult(sentence); } diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/word/WordEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/word/WordEngine.java index 71722c99a..5c310fffe 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/word/WordEngine.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/tokenizer/engine/word/WordEngine.java @@ -59,7 +59,7 @@ public class WordEngine implements TokenizerEngine { @Override public Result parse(final CharSequence text) { - return new WordResult(this.segmentation.seg(StrUtil.str(text))); + return new WordResult(this.segmentation.seg(StrUtil.toStringOrEmpty(text))); } } diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/GlobalHeaders.java b/hutool-http/src/main/java/org/dromara/hutool/http/GlobalHeaders.java index 8fd6e6dd4..1ef1c9c4f 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/GlobalHeaders.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/GlobalHeaders.java @@ -199,7 +199,7 @@ public enum GlobalHeaders { for (final Entry> entry : headers.entrySet()) { name = entry.getKey(); for (final String value : entry.getValue()) { - this.header(name, StrUtil.emptyIfNull(value), false); + this.header(name, StrUtil.toStringOrEmpty(value), false); } } return this; diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/HeaderOperation.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/HeaderOperation.java index 39b7f3d00..e9a03cef7 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/HeaderOperation.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/HeaderOperation.java @@ -126,7 +126,7 @@ public interface HeaderOperation> { for (final Map.Entry> entry : headerMap.entrySet()) { name = entry.getKey(); for (final String value : entry.getValue()) { - this.header(name, StrUtil.emptyIfNull(value), isOverride); + this.header(name, StrUtil.toStringOrEmpty(value), isOverride); } } } diff --git a/hutool-json/src/main/java/org/dromara/hutool/json/JSONTokener.java b/hutool-json/src/main/java/org/dromara/hutool/json/JSONTokener.java index 5daad54a8..9040438f9 100644 --- a/hutool-json/src/main/java/org/dromara/hutool/json/JSONTokener.java +++ b/hutool-json/src/main/java/org/dromara/hutool/json/JSONTokener.java @@ -14,6 +14,7 @@ package org.dromara.hutool.json; import org.dromara.hutool.core.io.IoUtil; import org.dromara.hutool.core.io.ReaderWrapper; +import org.dromara.hutool.core.lang.Assert; import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.json.mapper.JSONValueMapper; @@ -76,7 +77,7 @@ public class JSONTokener extends ReaderWrapper { * @param config JSON配置 */ public JSONTokener(final CharSequence s, final JSONConfig config) { - this(new StringReader(StrUtil.str(s)), config); + this(new StringReader(Assert.notBlank(s).toString()), config); } /** @@ -86,7 +87,7 @@ public class JSONTokener extends ReaderWrapper { * @param config JSON配置 */ public JSONTokener(final Reader reader, final JSONConfig config) { - super(IoUtil.toMarkSupport(reader)); + super(IoUtil.toMarkSupport(Assert.notNull(reader))); this.eof = false; this.usePrevious = false; this.previous = 0; diff --git a/hutool-poi/src/main/java/org/dromara/hutool/poi/excel/cell/setters/EscapeStrCellSetter.java b/hutool-poi/src/main/java/org/dromara/hutool/poi/excel/cell/setters/EscapeStrCellSetter.java index ac7dc86dd..8eadac1f7 100644 --- a/hutool-poi/src/main/java/org/dromara/hutool/poi/excel/cell/setters/EscapeStrCellSetter.java +++ b/hutool-poi/src/main/java/org/dromara/hutool/poi/excel/cell/setters/EscapeStrCellSetter.java @@ -35,7 +35,7 @@ public class EscapeStrCellSetter extends CharSequenceCellSetter { * @param value 值 */ public EscapeStrCellSetter(final CharSequence value) { - super(escape(StrUtil.str(value))); + super(escape(StrUtil.toStringOrNull(value))); } /** diff --git a/hutool-setting/src/main/java/org/dromara/hutool/setting/GroupedMap.java b/hutool-setting/src/main/java/org/dromara/hutool/setting/GroupedMap.java index ebc1f2acb..b390d9d4e 100644 --- a/hutool-setting/src/main/java/org/dromara/hutool/setting/GroupedMap.java +++ b/hutool-setting/src/main/java/org/dromara/hutool/setting/GroupedMap.java @@ -50,9 +50,9 @@ public class GroupedMap extends LinkedHashMap map = this.get(StrUtil.emptyIfNull(group)); + final LinkedHashMap map = this.get(StrUtil.toStringOrEmpty(group)); if (MapUtil.isNotEmpty(map)) { - return map.get(StrUtil.str(key)); + return map.get(StrUtil.toStringOrNull(key)); } } finally { readLock.unlock(); @@ -100,7 +100,7 @@ public class GroupedMap extends LinkedHashMap valueMap = this.computeIfAbsent(group, k -> new LinkedHashMap<>()); @@ -133,7 +133,7 @@ public class GroupedMap extends LinkedHashMap valueMap = this.get(group); @@ -153,7 +153,7 @@ public class GroupedMap extends LinkedHashMap valueMap = this.get(group); @@ -184,7 +184,7 @@ public class GroupedMap extends LinkedHashMap valueMap = this.get(group); @@ -205,7 +205,7 @@ public class GroupedMap extends LinkedHashMap valueMap = this.get(group); @@ -225,7 +225,7 @@ public class GroupedMap extends LinkedHashMap valueMap = this.get(group); @@ -255,7 +255,7 @@ public class GroupedMap extends LinkedHashMap keySet(String group) { - group = StrUtil.emptyIfNull(group).trim(); + group = StrUtil.toStringOrEmpty(group).trim(); readLock.lock(); try { final LinkedHashMap valueMap = this.get(group); @@ -275,7 +275,7 @@ public class GroupedMap extends LinkedHashMap values(String group) { - group = StrUtil.emptyIfNull(group).trim(); + group = StrUtil.toStringOrEmpty(group).trim(); readLock.lock(); try { final LinkedHashMap valueMap = this.get(group); @@ -305,7 +305,7 @@ public class GroupedMap extends LinkedHashMap> entrySet(String group) { - group = StrUtil.emptyIfNull(group).trim(); + group = StrUtil.toStringOrEmpty(group).trim(); readLock.lock(); try { final LinkedHashMap valueMap = this.get(group); diff --git a/hutool-setting/src/main/java/org/dromara/hutool/setting/profile/Profile.java b/hutool-setting/src/main/java/org/dromara/hutool/setting/profile/Profile.java index 061cca921..8e94511e3 100644 --- a/hutool-setting/src/main/java/org/dromara/hutool/setting/profile/Profile.java +++ b/hutool-setting/src/main/java/org/dromara/hutool/setting/profile/Profile.java @@ -149,7 +149,7 @@ public class Profile implements Serializable { */ private String fixNameForProfile(final String name) { Assert.notBlank(name, "Setting name must be not blank !"); - final String actralProfile = StrUtil.emptyIfNull(this.profile); + final String actralProfile = StrUtil.toStringOrEmpty(this.profile); if (!name.contains(StrUtil.DOT)) { return StrUtil.format("{}/{}.setting", actralProfile, name); } diff --git a/hutool-setting/src/main/java/org/dromara/hutool/setting/props/Props.java b/hutool-setting/src/main/java/org/dromara/hutool/setting/props/Props.java index 5a91fb77b..6a74aa691 100644 --- a/hutool-setting/src/main/java/org/dromara/hutool/setting/props/Props.java +++ b/hutool-setting/src/main/java/org/dromara/hutool/setting/props/Props.java @@ -247,7 +247,8 @@ public final class Props extends Properties implements TypeGetter @Override public Object getObj(final CharSequence key, final Object defaultValue) { - return ObjUtil.defaultIfNull(getProperty(StrUtil.str(key)), defaultValue); + Assert.notNull(key, "Key must be not null!"); + return ObjUtil.defaultIfNull(getProperty(key.toString()), defaultValue); } /** @@ -408,7 +409,7 @@ public final class Props extends Properties implements TypeGetter * @since 4.6.3 */ public T toBean(final T bean, String prefix) { - prefix = StrUtil.emptyIfNull(StrUtil.addSuffixIfNot(prefix, StrUtil.DOT)); + prefix = StrUtil.toStringOrEmpty(StrUtil.addSuffixIfNot(prefix, StrUtil.DOT)); String key; for (final java.util.Map.Entry entry : this.entrySet()) { diff --git a/hutool-setting/src/main/java/org/dromara/hutool/setting/toml/TomlWriter.java b/hutool-setting/src/main/java/org/dromara/hutool/setting/toml/TomlWriter.java index 970ee7c22..8ed223c00 100644 --- a/hutool-setting/src/main/java/org/dromara/hutool/setting/toml/TomlWriter.java +++ b/hutool-setting/src/main/java/org/dromara/hutool/setting/toml/TomlWriter.java @@ -200,7 +200,7 @@ public class TomlWriter { indent(); writeKey(name); write(" = "); - writeString(StrUtil.emptyIfNull(ArrayUtil.toString(array))); + writeString(StrUtil.toStringOrEmpty(ArrayUtil.toString(array))); } } else if (value instanceof Map) {// table if (simpleValues) {