1.fix doc;

2.update code;
This commit is contained in:
emptypoint 2023-03-12 20:52:27 +08:00
parent fb7e88515a
commit 32c7dd0c6b
5 changed files with 44 additions and 38 deletions

View File

@ -1,7 +1,7 @@
package cn.hutool.core.text.finder; package cn.hutool.core.text.finder;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.math.NumberUtil; import cn.hutool.core.util.CharUtil;
/** /**
* 字符查找器<br> * 字符查找器<br>
@ -42,13 +42,13 @@ public class CharFinder extends TextFinder {
final int limit = getValidEndIndex(); final int limit = getValidEndIndex();
if(negative){ if(negative){
for (int i = from; i > limit; i--) { for (int i = from; i > limit; i--) {
if (NumberUtil.equals(c, text.charAt(i), caseInsensitive)) { if (CharUtil.equals(c, text.charAt(i), caseInsensitive)) {
return i; return i;
} }
} }
} else{ } else{
for (int i = from; i < limit; i++) { for (int i = from; i < limit; i++) {
if (NumberUtil.equals(c, text.charAt(i), caseInsensitive)) { if (CharUtil.equals(c, text.charAt(i), caseInsensitive)) {
return i; return i;
} }
} }

View File

@ -16,7 +16,7 @@ public class LengthFinder extends TextFinder {
/** /**
* 构造 * 构造
* @param length 长度 * @param length 长度必须大于0
*/ */
public LengthFinder(final int length) { public LengthFinder(final int length) {
Assert.isTrue(length > 0, "Length must be great than 0"); Assert.isTrue(length > 0, "Length must be great than 0");

View File

@ -1,5 +1,7 @@
package cn.hutool.core.text.finder; package cn.hutool.core.text.finder;
import cn.hutool.core.regex.PatternPool;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -23,7 +25,7 @@ public class PatternFinder extends TextFinder {
* @param caseInsensitive 是否忽略大小写 * @param caseInsensitive 是否忽略大小写
*/ */
public PatternFinder(final String regex, final boolean caseInsensitive) { public PatternFinder(final String regex, final boolean caseInsensitive) {
this(Pattern.compile(regex, caseInsensitive ? Pattern.CASE_INSENSITIVE : 0)); this(PatternPool.get(regex, caseInsensitive ? Pattern.CASE_INSENSITIVE : 0));
} }
/** /**

View File

@ -125,7 +125,7 @@ public class SplitIter extends ComputeIter<String> implements Serializable {
* @return 切分后的列表 * @return 切分后的列表
*/ */
public List<String> toList(final boolean trim) { public List<String> toList(final boolean trim) {
return toList((str) -> trim ? StrUtil.trim(str) : str); return toList(trim ? StrUtil::trim : Function.identity());
} }
/** /**

View File

@ -25,6 +25,7 @@ public class SplitUtil {
/** /**
* 切分字符串路径仅支持Unix分界符/ * 切分字符串路径仅支持Unix分界符/
* <p>去除每个元素两边空格大小写敏感忽略空串</p>
* *
* @param str 被切分的字符串 * @param str 被切分的字符串
* @return 切分后的集合 * @return 切分后的集合
@ -36,6 +37,7 @@ public class SplitUtil {
/** /**
* 切分字符串路径仅支持Unix分界符/ * 切分字符串路径仅支持Unix分界符/
* <p>去除每个元素两边空格大小写敏感忽略空串</p>
* *
* @param str 被切分的字符串 * @param str 被切分的字符串
* @return 切分后的集合 * @return 切分后的集合
@ -47,9 +49,10 @@ public class SplitUtil {
/** /**
* 切分字符串路径仅支持Unix分界符/ * 切分字符串路径仅支持Unix分界符/
* <p>去除每个元素两边空格大小写敏感忽略空串</p>
* *
* @param str 被切分的字符串 * @param str 被切分的字符串
* @param limit 限制分片数 * @param limit 限制分片数小于等于0表示无限制
* @return 切分后的集合 * @return 切分后的集合
* @since 3.0.8 * @since 3.0.8
*/ */
@ -59,9 +62,10 @@ public class SplitUtil {
/** /**
* 切分字符串路径仅支持Unix分界符/ * 切分字符串路径仅支持Unix分界符/
* <p>去除每个元素两边空格大小写敏感忽略空串</p>
* *
* @param str 被切分的字符串 * @param str 被切分的字符串
* @param limit 限制分片数 * @param limit 限制分片数小于等于0表示无限制
* @return 切分后的集合 * @return 切分后的集合
* @since 3.0.8 * @since 3.0.8
*/ */
@ -70,7 +74,7 @@ public class SplitUtil {
} }
/** /**
* 切分字符串 * 切分字符串大小写敏感去除每个元素两边空白符
* *
* @param str 被切分的字符串 * @param str 被切分的字符串
* @param separator 分隔符字符 * @param separator 分隔符字符
@ -101,7 +105,7 @@ public class SplitUtil {
* *
* @param str 被切分的字符串 * @param str 被切分的字符串
* @param separator 分隔符字符 * @param separator 分隔符字符
* @param limit 限制分片数-1不限制 * @param limit 限制分片数小于等于0表示无限制
* @param ignoreEmpty 是否忽略空串 * @param ignoreEmpty 是否忽略空串
* @return 切分后的集合 * @return 切分后的集合
* @since 3.0.8 * @since 3.0.8
@ -115,7 +119,7 @@ public class SplitUtil {
* *
* @param str 被切分的字符串 * @param str 被切分的字符串
* @param separator 分隔符字符 * @param separator 分隔符字符
* @param limit 限制分片数-1不限制 * @param limit 限制分片数小于等于0表示无限制
* @param isTrim 是否去除切分字符串后每个元素两边的空格 * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串 * @param ignoreEmpty 是否忽略空串
* @return 切分后的集合 * @return 切分后的集合
@ -131,7 +135,7 @@ public class SplitUtil {
* @param <R> 切分后的元素类型 * @param <R> 切分后的元素类型
* @param str 被切分的字符串 * @param str 被切分的字符串
* @param separator 分隔符字符 * @param separator 分隔符字符
* @param limit 限制分片数-1不限制 * @param limit 限制分片数小于等于0表示无限制
* @param ignoreEmpty 是否忽略空串 * @param ignoreEmpty 是否忽略空串
* @param mapping 切分后的字符串元素的转换方法 * @param mapping 切分后的字符串元素的转换方法
* @return 切分后的集合元素类型是经过 mapping 转换后的 * @return 切分后的集合元素类型是经过 mapping 转换后的
@ -146,7 +150,7 @@ public class SplitUtil {
* *
* @param text 被切分的字符串 * @param text 被切分的字符串
* @param separator 分隔符字符 * @param separator 分隔符字符
* @param limit 限制分片数-1不限制 * @param limit 限制分片数小于等于0表示无限制
* @param isTrim 是否去除切分字符串后每个元素两边的空格 * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串 * @param ignoreEmpty 是否忽略空串
* @return 切分后的集合 * @return 切分后的集合
@ -161,7 +165,7 @@ public class SplitUtil {
* *
* @param text 被切分的字符串 * @param text 被切分的字符串
* @param separator 分隔符字符 * @param separator 分隔符字符
* @param limit 限制分片数-1不限制 * @param limit 限制分片数小于等于0表示无限制
* @param isTrim 是否去除切分字符串后每个元素两边的空格 * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串 * @param ignoreEmpty 是否忽略空串
* @param ignoreCase 是否忽略大小写 * @param ignoreCase 是否忽略大小写
@ -178,7 +182,7 @@ public class SplitUtil {
* @param <R> 切分后的元素类型 * @param <R> 切分后的元素类型
* @param text 被切分的字符串 * @param text 被切分的字符串
* @param separator 分隔符字符 * @param separator 分隔符字符
* @param limit 限制分片数-1不限制 * @param limit 限制分片数小于等于0表示无限制
* @param ignoreEmpty 是否忽略空串 * @param ignoreEmpty 是否忽略空串
* @param ignoreCase 是否忽略大小写 * @param ignoreCase 是否忽略大小写
* @param mapping 切分后的字符串元素的转换方法 * @param mapping 切分后的字符串元素的转换方法
@ -187,7 +191,7 @@ public class SplitUtil {
*/ */
public static <R> List<R> split(final CharSequence text, final char separator, final int limit, final boolean ignoreEmpty, public static <R> List<R> split(final CharSequence text, final char separator, final int limit, final boolean ignoreEmpty,
final boolean ignoreCase, final Function<String, R> mapping) { final boolean ignoreCase, final Function<String, R> mapping) {
if (null == text) { if (StrUtil.isEmpty(text)) {
return new ArrayList<>(0); return new ArrayList<>(0);
} }
final SplitIter splitIter = new SplitIter(text, new CharFinder(separator, ignoreCase), limit, ignoreEmpty); final SplitIter splitIter = new SplitIter(text, new CharFinder(separator, ignoreCase), limit, ignoreEmpty);
@ -199,7 +203,7 @@ public class SplitUtil {
* *
* @param str 被切分的字符串 * @param str 被切分的字符串
* @param separator 分隔符字符 * @param separator 分隔符字符
* @param limit 限制分片数 * @param limit 限制分片数小于等于0表示无限制
* @param isTrim 是否去除切分字符串后每个元素两边的空格 * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串 * @param ignoreEmpty 是否忽略空串
* @return 切分后的集合 * @return 切分后的集合
@ -226,7 +230,7 @@ public class SplitUtil {
} }
/** /**
* 切分字符串去除每个元素两边空格忽略大小写 * 切分字符串去除每个元素两边空格忽略大小写
* *
* @param str 被切分的字符串 * @param str 被切分的字符串
* @param separator 分隔符字符串 * @param separator 分隔符字符串
@ -254,11 +258,11 @@ public class SplitUtil {
} }
/** /**
* 切分字符串去除每个元素两边空格忽略大小写 * 切分字符串去除每个元素两边空格忽略大小写
* *
* @param str 被切分的字符串 * @param str 被切分的字符串
* @param separator 分隔符字符串 * @param separator 分隔符字符串
* @param limit 限制分片数 * @param limit 限制分片数小于等于0表示无限制
* @param ignoreEmpty 是否忽略空串 * @param ignoreEmpty 是否忽略空串
* @return 切分后的集合 * @return 切分后的集合
* @since 3.2.1 * @since 3.2.1
@ -272,7 +276,7 @@ public class SplitUtil {
* *
* @param str 被切分的字符串 * @param str 被切分的字符串
* @param separator 分隔符字符串 * @param separator 分隔符字符串
* @param limit 限制分片数 * @param limit 限制分片数小于等于0表示无限制
* @param isTrim 是否去除切分字符串后每个元素两边的空格 * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串 * @param ignoreEmpty 是否忽略空串
* @return 切分后的集合 * @return 切分后的集合
@ -287,7 +291,7 @@ public class SplitUtil {
* *
* @param str 被切分的字符串 * @param str 被切分的字符串
* @param separator 分隔符字符串 * @param separator 分隔符字符串
* @param limit 限制分片数 * @param limit 限制分片数小于等于0表示无限制
* @param ignoreEmpty 是否忽略空串 * @param ignoreEmpty 是否忽略空串
* @return 切分后的集合 * @return 切分后的集合
* @since 3.2.1 * @since 3.2.1
@ -310,7 +314,7 @@ public class SplitUtil {
* @since 3.2.1 * @since 3.2.1
*/ */
public static List<String> split(final CharSequence text, final String separator, final int limit, final boolean isTrim, final boolean ignoreEmpty, final boolean ignoreCase) { public static List<String> split(final CharSequence text, final String separator, final int limit, final boolean isTrim, final boolean ignoreEmpty, final boolean ignoreCase) {
if (null == text) { if (StrUtil.isEmpty(text)) {
return new ArrayList<>(0); return new ArrayList<>(0);
} }
final SplitIter splitIter = new SplitIter(text, new StrFinder(separator, ignoreCase), limit, ignoreEmpty); final SplitIter splitIter = new SplitIter(text, new StrFinder(separator, ignoreCase), limit, ignoreEmpty);
@ -340,12 +344,12 @@ public class SplitUtil {
* 如果为空字符串或者null 则返回空集合 * 如果为空字符串或者null 则返回空集合
* *
* @param text 被切分的字符串 * @param text 被切分的字符串
* @param limit 限制分片数 * @param limit 限制分片数小于等于0表示无限制
* @return 切分后的集合 * @return 切分后的集合
* @since 3.0.8 * @since 3.0.8
*/ */
public static List<String> split(final CharSequence text, final int limit) { public static List<String> split(final CharSequence text, final int limit) {
if (null == text) { if (StrUtil.isBlank(text)) {
return new ArrayList<>(0); return new ArrayList<>(0);
} }
final SplitIter splitIter = new SplitIter(text, new CharMatcherFinder(CharUtil::isBlankChar), limit, true); final SplitIter splitIter = new SplitIter(text, new CharMatcherFinder(CharUtil::isBlankChar), limit, true);
@ -356,11 +360,11 @@ public class SplitUtil {
* 切分字符串为字符串数组 * 切分字符串为字符串数组
* *
* @param str 被切分的字符串 * @param str 被切分的字符串
* @param limit 限制分片数 * @param limit 限制分片数小于等于0表示无限制
* @return 切分后的集合 * @return 切分后的集合
* @since 3.0.8 * @since 3.0.8
*/ */
public static String[] splitToArray(final String str, final int limit) { public static String[] splitToArray(final CharSequence str, final int limit) {
return toArray(split(str, limit)); return toArray(split(str, limit));
} }
//---------------------------------------------------------------------------------------------- Split by regex //---------------------------------------------------------------------------------------------- Split by regex
@ -370,13 +374,13 @@ public class SplitUtil {
* *
* @param text 字符串 * @param text 字符串
* @param separatorRegex 分隔符正则 * @param separatorRegex 分隔符正则
* @param limit 限制分片数 * @param limit 限制分片数小于等于0表示无限制
* @param isTrim 是否去除切分字符串后每个元素两边的空格 * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串 * @param ignoreEmpty 是否忽略空串
* @return 切分后的集合 * @return 切分后的集合
* @since 3.0.8 * @since 3.0.8
*/ */
public static List<String> splitByRegex(final String text, final String separatorRegex, final int limit, final boolean isTrim, final boolean ignoreEmpty) { public static List<String> splitByRegex(final CharSequence text, final String separatorRegex, final int limit, final boolean isTrim, final boolean ignoreEmpty) {
final Pattern pattern = PatternPool.get(separatorRegex); final Pattern pattern = PatternPool.get(separatorRegex);
return split(text, pattern, limit, isTrim, ignoreEmpty); return split(text, pattern, limit, isTrim, ignoreEmpty);
} }
@ -387,14 +391,14 @@ public class SplitUtil {
* *
* @param text 字符串 * @param text 字符串
* @param separatorPattern 分隔符正则{@link Pattern} * @param separatorPattern 分隔符正则{@link Pattern}
* @param limit 限制分片数 * @param limit 限制分片数小于等于0表示无限制
* @param isTrim 是否去除切分字符串后每个元素两边的空格 * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串 * @param ignoreEmpty 是否忽略空串
* @return 切分后的集合 * @return 切分后的集合
* @since 3.0.8 * @since 3.0.8
*/ */
public static List<String> split(final String text, final Pattern separatorPattern, final int limit, final boolean isTrim, final boolean ignoreEmpty) { public static List<String> split(final CharSequence text, final Pattern separatorPattern, final int limit, final boolean isTrim, final boolean ignoreEmpty) {
if (null == text) { if (StrUtil.isEmpty(text)) {
return new ArrayList<>(0); return new ArrayList<>(0);
} }
final SplitIter splitIter = new SplitIter(text, new PatternFinder(separatorPattern), limit, ignoreEmpty); final SplitIter splitIter = new SplitIter(text, new PatternFinder(separatorPattern), limit, ignoreEmpty);
@ -406,13 +410,13 @@ public class SplitUtil {
* *
* @param str 被切分的字符串 * @param str 被切分的字符串
* @param separatorPattern 分隔符正则{@link Pattern} * @param separatorPattern 分隔符正则{@link Pattern}
* @param limit 限制分片数 * @param limit 限制分片数小于等于0表示无限制
* @param isTrim 是否去除切分字符串后每个元素两边的空格 * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串 * @param ignoreEmpty 是否忽略空串
* @return 切分后的集合 * @return 切分后的集合
* @since 3.0.8 * @since 3.0.8
*/ */
public static String[] splitToArray(final String str, final Pattern separatorPattern, final int limit, final boolean isTrim, final boolean ignoreEmpty) { public static String[] splitToArray(final CharSequence str, final Pattern separatorPattern, final int limit, final boolean isTrim, final boolean ignoreEmpty) {
return toArray(split(str, separatorPattern, limit, isTrim, ignoreEmpty)); return toArray(split(str, separatorPattern, limit, isTrim, ignoreEmpty));
} }
//---------------------------------------------------------------------------------------------- Split by length //---------------------------------------------------------------------------------------------- Split by length
@ -421,11 +425,11 @@ public class SplitUtil {
* 根据给定长度将给定字符串截取为多个部分 * 根据给定长度将给定字符串截取为多个部分
* *
* @param text 字符串 * @param text 字符串
* @param len 每一个小节的长度 * @param len 每一个小节的长度必须大于0
* @return 截取后的字符串数组 * @return 截取后的字符串数组
*/ */
public static String[] splitByLength(final CharSequence text, final int len) { public static String[] splitByLength(final CharSequence text, final int len) {
if (null == text) { if (StrUtil.isEmpty(text)) {
return new String[0]; return new String[0];
} }
final SplitIter splitIter = new SplitIter(text, new LengthFinder(len), -1, false); final SplitIter splitIter = new SplitIter(text, new LengthFinder(len), -1, false);
@ -449,8 +453,8 @@ public class SplitUtil {
* @param isTrim 是否trim * @param isTrim 是否trim
* @return {@link Function} * @return {@link Function}
*/ */
private static Function<String, String> trimFunc(final boolean isTrim) { public static Function<String, String> trimFunc(final boolean isTrim) {
return (str) -> isTrim ? StrUtil.trim(str) : str; return isTrim ? StrUtil::trim : Function.identity();
} }
//---------------------------------------------------------------------------------------------------------- Private method end //---------------------------------------------------------------------------------------------------------- Private method end
} }