mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-24 18:04:54 +08:00
!954 优化SplitUtil
Merge pull request !954 from emptypoint/update-SplitUtil
This commit is contained in:
commit
0df74202c2
@ -1,7 +1,7 @@
|
||||
package cn.hutool.core.text.finder;
|
||||
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.math.NumberUtil;
|
||||
import cn.hutool.core.util.CharUtil;
|
||||
|
||||
/**
|
||||
* 字符查找器<br>
|
||||
@ -42,13 +42,13 @@ public class CharFinder extends TextFinder {
|
||||
final int limit = getValidEndIndex();
|
||||
if(negative){
|
||||
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;
|
||||
}
|
||||
}
|
||||
} else{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ public class LengthFinder extends TextFinder {
|
||||
|
||||
/**
|
||||
* 构造
|
||||
* @param length 长度
|
||||
* @param length 长度,必须大于0
|
||||
*/
|
||||
public LengthFinder(final int length) {
|
||||
Assert.isTrue(length > 0, "Length must be great than 0");
|
||||
|
@ -1,5 +1,7 @@
|
||||
package cn.hutool.core.text.finder;
|
||||
|
||||
import cn.hutool.core.regex.PatternPool;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
@ -23,7 +25,7 @@ public class PatternFinder extends TextFinder {
|
||||
* @param 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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -125,7 +125,7 @@ public class SplitIter extends ComputeIter<String> implements Serializable {
|
||||
* @return 切分后的列表
|
||||
*/
|
||||
public List<String> toList(final boolean trim) {
|
||||
return toList((str) -> trim ? StrUtil.trim(str) : str);
|
||||
return toList(trim ? StrUtil::trim : Function.identity());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -25,6 +25,7 @@ public class SplitUtil {
|
||||
|
||||
/**
|
||||
* 切分字符串路径,仅支持Unix分界符:/
|
||||
* <p>去除每个元素两边空格,大小写敏感,忽略空串</p>
|
||||
*
|
||||
* @param str 被切分的字符串
|
||||
* @return 切分后的集合
|
||||
@ -36,6 +37,7 @@ public class SplitUtil {
|
||||
|
||||
/**
|
||||
* 切分字符串路径,仅支持Unix分界符:/
|
||||
* <p>去除每个元素两边空格,大小写敏感,忽略空串</p>
|
||||
*
|
||||
* @param str 被切分的字符串
|
||||
* @return 切分后的集合
|
||||
@ -47,9 +49,10 @@ public class SplitUtil {
|
||||
|
||||
/**
|
||||
* 切分字符串路径,仅支持Unix分界符:/
|
||||
* <p>去除每个元素两边空格,大小写敏感,忽略空串</p>
|
||||
*
|
||||
* @param str 被切分的字符串
|
||||
* @param limit 限制分片数
|
||||
* @param limit 限制分片数,小于等于0表示无限制
|
||||
* @return 切分后的集合
|
||||
* @since 3.0.8
|
||||
*/
|
||||
@ -59,9 +62,10 @@ public class SplitUtil {
|
||||
|
||||
/**
|
||||
* 切分字符串路径,仅支持Unix分界符:/
|
||||
* <p>去除每个元素两边空格,大小写敏感,忽略空串</p>
|
||||
*
|
||||
* @param str 被切分的字符串
|
||||
* @param limit 限制分片数
|
||||
* @param limit 限制分片数,小于等于0表示无限制
|
||||
* @return 切分后的集合
|
||||
* @since 3.0.8
|
||||
*/
|
||||
@ -70,7 +74,7 @@ public class SplitUtil {
|
||||
}
|
||||
|
||||
/**
|
||||
* 切分字符串
|
||||
* 切分字符串,大小写敏感,去除每个元素两边空白符
|
||||
*
|
||||
* @param str 被切分的字符串
|
||||
* @param separator 分隔符字符
|
||||
@ -101,7 +105,7 @@ public class SplitUtil {
|
||||
*
|
||||
* @param str 被切分的字符串
|
||||
* @param separator 分隔符字符
|
||||
* @param limit 限制分片数,-1不限制
|
||||
* @param limit 限制分片数,小于等于0表示无限制
|
||||
* @param ignoreEmpty 是否忽略空串
|
||||
* @return 切分后的集合
|
||||
* @since 3.0.8
|
||||
@ -115,7 +119,7 @@ public class SplitUtil {
|
||||
*
|
||||
* @param str 被切分的字符串
|
||||
* @param separator 分隔符字符
|
||||
* @param limit 限制分片数,-1不限制
|
||||
* @param limit 限制分片数,小于等于0表示无限制
|
||||
* @param isTrim 是否去除切分字符串后每个元素两边的空格
|
||||
* @param ignoreEmpty 是否忽略空串
|
||||
* @return 切分后的集合
|
||||
@ -131,7 +135,7 @@ public class SplitUtil {
|
||||
* @param <R> 切分后的元素类型
|
||||
* @param str 被切分的字符串
|
||||
* @param separator 分隔符字符
|
||||
* @param limit 限制分片数,-1不限制
|
||||
* @param limit 限制分片数,小于等于0表示无限制
|
||||
* @param ignoreEmpty 是否忽略空串
|
||||
* @param mapping 切分后的字符串元素的转换方法
|
||||
* @return 切分后的集合,元素类型是经过 mapping 转换后的
|
||||
@ -146,7 +150,7 @@ public class SplitUtil {
|
||||
*
|
||||
* @param text 被切分的字符串
|
||||
* @param separator 分隔符字符
|
||||
* @param limit 限制分片数,-1不限制
|
||||
* @param limit 限制分片数,小于等于0表示无限制
|
||||
* @param isTrim 是否去除切分字符串后每个元素两边的空格
|
||||
* @param ignoreEmpty 是否忽略空串
|
||||
* @return 切分后的集合
|
||||
@ -161,7 +165,7 @@ public class SplitUtil {
|
||||
*
|
||||
* @param text 被切分的字符串
|
||||
* @param separator 分隔符字符
|
||||
* @param limit 限制分片数,-1不限制
|
||||
* @param limit 限制分片数,小于等于0表示无限制
|
||||
* @param isTrim 是否去除切分字符串后每个元素两边的空格
|
||||
* @param ignoreEmpty 是否忽略空串
|
||||
* @param ignoreCase 是否忽略大小写
|
||||
@ -178,7 +182,7 @@ public class SplitUtil {
|
||||
* @param <R> 切分后的元素类型
|
||||
* @param text 被切分的字符串
|
||||
* @param separator 分隔符字符
|
||||
* @param limit 限制分片数,-1不限制
|
||||
* @param limit 限制分片数,小于等于0表示无限制
|
||||
* @param ignoreEmpty 是否忽略空串
|
||||
* @param ignoreCase 是否忽略大小写
|
||||
* @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,
|
||||
final boolean ignoreCase, final Function<String, R> mapping) {
|
||||
if (null == text) {
|
||||
if (StrUtil.isEmpty(text)) {
|
||||
return new ArrayList<>(0);
|
||||
}
|
||||
final SplitIter splitIter = new SplitIter(text, new CharFinder(separator, ignoreCase), limit, ignoreEmpty);
|
||||
@ -199,7 +203,7 @@ public class SplitUtil {
|
||||
*
|
||||
* @param str 被切分的字符串
|
||||
* @param separator 分隔符字符
|
||||
* @param limit 限制分片数
|
||||
* @param limit 限制分片数,小于等于0表示无限制
|
||||
* @param isTrim 是否去除切分字符串后每个元素两边的空格
|
||||
* @param ignoreEmpty 是否忽略空串
|
||||
* @return 切分后的集合
|
||||
@ -226,7 +230,7 @@ public class SplitUtil {
|
||||
}
|
||||
|
||||
/**
|
||||
* 切分字符串,去除每个元素两边空格,忽略大小写
|
||||
* 切分字符串,去除每个元素两边空格,不忽略大小写
|
||||
*
|
||||
* @param str 被切分的字符串
|
||||
* @param separator 分隔符字符串
|
||||
@ -254,11 +258,11 @@ public class SplitUtil {
|
||||
}
|
||||
|
||||
/**
|
||||
* 切分字符串,去除每个元素两边空格,忽略大小写
|
||||
* 切分字符串,去除每个元素两边空格,不忽略大小写
|
||||
*
|
||||
* @param str 被切分的字符串
|
||||
* @param separator 分隔符字符串
|
||||
* @param limit 限制分片数
|
||||
* @param limit 限制分片数,小于等于0表示无限制
|
||||
* @param ignoreEmpty 是否忽略空串
|
||||
* @return 切分后的集合
|
||||
* @since 3.2.1
|
||||
@ -272,7 +276,7 @@ public class SplitUtil {
|
||||
*
|
||||
* @param str 被切分的字符串
|
||||
* @param separator 分隔符字符串
|
||||
* @param limit 限制分片数
|
||||
* @param limit 限制分片数,小于等于0表示无限制
|
||||
* @param isTrim 是否去除切分字符串后每个元素两边的空格
|
||||
* @param ignoreEmpty 是否忽略空串
|
||||
* @return 切分后的集合
|
||||
@ -287,7 +291,7 @@ public class SplitUtil {
|
||||
*
|
||||
* @param str 被切分的字符串
|
||||
* @param separator 分隔符字符串
|
||||
* @param limit 限制分片数
|
||||
* @param limit 限制分片数,小于等于0表示无限制
|
||||
* @param ignoreEmpty 是否忽略空串
|
||||
* @return 切分后的集合
|
||||
* @since 3.2.1
|
||||
@ -310,7 +314,7 @@ public class SplitUtil {
|
||||
* @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) {
|
||||
if (null == text) {
|
||||
if (StrUtil.isEmpty(text)) {
|
||||
return new ArrayList<>(0);
|
||||
}
|
||||
final SplitIter splitIter = new SplitIter(text, new StrFinder(separator, ignoreCase), limit, ignoreEmpty);
|
||||
@ -340,12 +344,12 @@ public class SplitUtil {
|
||||
* 如果为空字符串或者null 则返回空集合
|
||||
*
|
||||
* @param text 被切分的字符串
|
||||
* @param limit 限制分片数
|
||||
* @param limit 限制分片数,小于等于0表示无限制
|
||||
* @return 切分后的集合
|
||||
* @since 3.0.8
|
||||
*/
|
||||
public static List<String> split(final CharSequence text, final int limit) {
|
||||
if (null == text) {
|
||||
if (StrUtil.isBlank(text)) {
|
||||
return new ArrayList<>(0);
|
||||
}
|
||||
final SplitIter splitIter = new SplitIter(text, new CharMatcherFinder(CharUtil::isBlankChar), limit, true);
|
||||
@ -356,11 +360,11 @@ public class SplitUtil {
|
||||
* 切分字符串为字符串数组
|
||||
*
|
||||
* @param str 被切分的字符串
|
||||
* @param limit 限制分片数
|
||||
* @param limit 限制分片数,小于等于0表示无限制
|
||||
* @return 切分后的集合
|
||||
* @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));
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------- Split by regex
|
||||
@ -370,13 +374,13 @@ public class SplitUtil {
|
||||
*
|
||||
* @param text 字符串
|
||||
* @param separatorRegex 分隔符正则
|
||||
* @param limit 限制分片数
|
||||
* @param limit 限制分片数,小于等于0表示无限制
|
||||
* @param isTrim 是否去除切分字符串后每个元素两边的空格
|
||||
* @param ignoreEmpty 是否忽略空串
|
||||
* @return 切分后的集合
|
||||
* @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);
|
||||
return split(text, pattern, limit, isTrim, ignoreEmpty);
|
||||
}
|
||||
@ -387,14 +391,14 @@ public class SplitUtil {
|
||||
*
|
||||
* @param text 字符串
|
||||
* @param separatorPattern 分隔符正则{@link Pattern}
|
||||
* @param limit 限制分片数
|
||||
* @param limit 限制分片数,小于等于0表示无限制
|
||||
* @param isTrim 是否去除切分字符串后每个元素两边的空格
|
||||
* @param ignoreEmpty 是否忽略空串
|
||||
* @return 切分后的集合
|
||||
* @since 3.0.8
|
||||
*/
|
||||
public static List<String> split(final String text, final Pattern separatorPattern, final int limit, final boolean isTrim, final boolean ignoreEmpty) {
|
||||
if (null == text) {
|
||||
public static List<String> split(final CharSequence text, final Pattern separatorPattern, final int limit, final boolean isTrim, final boolean ignoreEmpty) {
|
||||
if (StrUtil.isEmpty(text)) {
|
||||
return new ArrayList<>(0);
|
||||
}
|
||||
final SplitIter splitIter = new SplitIter(text, new PatternFinder(separatorPattern), limit, ignoreEmpty);
|
||||
@ -406,13 +410,13 @@ public class SplitUtil {
|
||||
*
|
||||
* @param str 被切分的字符串
|
||||
* @param separatorPattern 分隔符正则{@link Pattern}
|
||||
* @param limit 限制分片数
|
||||
* @param limit 限制分片数,小于等于0表示无限制
|
||||
* @param isTrim 是否去除切分字符串后每个元素两边的空格
|
||||
* @param ignoreEmpty 是否忽略空串
|
||||
* @return 切分后的集合
|
||||
* @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));
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------- Split by length
|
||||
@ -421,11 +425,11 @@ public class SplitUtil {
|
||||
* 根据给定长度,将给定字符串截取为多个部分
|
||||
*
|
||||
* @param text 字符串
|
||||
* @param len 每一个小节的长度
|
||||
* @param len 每一个小节的长度,必须大于0
|
||||
* @return 截取后的字符串数组
|
||||
*/
|
||||
public static String[] splitByLength(final CharSequence text, final int len) {
|
||||
if (null == text) {
|
||||
if (StrUtil.isEmpty(text)) {
|
||||
return new String[0];
|
||||
}
|
||||
final SplitIter splitIter = new SplitIter(text, new LengthFinder(len), -1, false);
|
||||
@ -449,8 +453,8 @@ public class SplitUtil {
|
||||
* @param isTrim 是否trim
|
||||
* @return {@link Function}
|
||||
*/
|
||||
private static Function<String, String> trimFunc(final boolean isTrim) {
|
||||
return (str) -> isTrim ? StrUtil.trim(str) : str;
|
||||
public static Function<String, String> trimFunc(final boolean isTrim) {
|
||||
return isTrim ? StrUtil::trim : Function.identity();
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------------- Private method end
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user