@@ -12,12 +12,13 @@ import java.util.regex.Pattern;
/**
* 字符串切分器
* @author Looly
*
* @author Looly
*/
public class StrSpliter {
//---------------------------------------------------------------------------------------------- Split by char
/**
* 切分字符串路径, 仅支持Unix分界符: /
*
@@ -25,7 +26,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.0.8
*/
public static List < String > splitPath ( String str ) {
public static List < String > splitPath ( String str ) {
return splitPath ( str , 0 ) ;
}
@@ -36,7 +37,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.0.8
*/
public static String [ ] splitPathToArray ( String str ) {
public static String [ ] splitPathToArray ( String str ) {
return toArray ( splitPath ( str ) ) ;
}
@@ -48,7 +49,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.0.8
*/
public static List < String > splitPath ( String str , int limit ) {
public static List < String > splitPath ( String str , int limit ) {
return split ( str , StrUtil . C_SLASH , limit , true , true ) ;
}
@@ -60,7 +61,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.0.8
*/
public static String [ ] splitPathToArray ( String str , int limit ) {
public static String [ ] splitPathToArray ( String str , int limit ) {
return toArray ( splitPath ( str , limit ) ) ;
}
@@ -73,7 +74,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.2.1
*/
public static List < String > splitTrim ( String str , char separator , boolean ignoreEmpty ) {
public static List < String > splitTrim ( String str , char separator , boolean ignoreEmpty ) {
return split ( str , separator , 0 , true , ignoreEmpty ) ;
}
@@ -87,7 +88,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.0.8
*/
public static List < String > split ( String str , char separator , boolean isTrim , boolean ignoreEmpty ) {
public static List < String > split ( String str , char separator , boolean isTrim , boolean ignoreEmpty ) {
return split ( str , separator , 0 , isTrim , ignoreEmpty ) ;
}
@@ -101,7 +102,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.0.8
*/
public static List < String > splitTrim ( String str , char separator , int limit , boolean ignoreEmpty ) {
public static List < String > splitTrim ( String str , char separator , int limit , boolean ignoreEmpty ) {
return split ( str , separator , limit , true , ignoreEmpty , false ) ;
}
@@ -116,7 +117,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.0.8
*/
public static List < String > split ( String str , char separator , int limit , boolean isTrim , boolean ignoreEmpty ) {
public static List < String > split ( String str , char separator , int limit , boolean isTrim , boolean ignoreEmpty ) {
return split ( str , separator , limit , isTrim , ignoreEmpty , false ) ;
}
@@ -131,7 +132,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.2.1
*/
public static List < String > splitIgnoreCase ( String str , char separator , int limit , boolean isTrim , boolean ignoreEmpty ) {
public static List < String > splitIgnoreCase ( String str , char separator , int limit , boolean isTrim , boolean ignoreEmpty ) {
return split ( str , separator , limit , isTrim , ignoreEmpty , true ) ;
}
@@ -147,24 +148,24 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.2.1
*/
public static List < String > split ( String str , char separator , int limit , boolean isTrim , boolean ignoreEmpty , boolean ignoreCase ) {
if ( StrUtil . isEmpty ( str ) ) {
public static List < String > split ( String str , char separator , int limit , boolean isTrim , boolean ignoreEmpty , boolean ignoreCase ) {
if ( StrUtil . isEmpty ( str ) ) {
return new ArrayList < > ( 0 ) ;
}
if ( limit = = 1 ) {
if ( limit = = 1 ) {
return addToList ( new ArrayList < > ( 1 ) , str , isTrim , ignoreEmpty ) ;
}
final ArrayList < String > list = new ArrayList < > ( limit > 0 ? limit : 16 ) ;
int len = str . length ( ) ;
int start = 0 ; //切分后每个部分的起始
for ( int i = 0 ; i < len ; i + + ) {
if ( NumberUtil . equals ( separator , str . charAt ( i ) , ignoreCase ) ) {
for ( int i = 0 ; i < len ; i + + ) {
if ( NumberUtil . equals ( separator , str . charAt ( i ) , ignoreCase ) ) {
addToList ( list , str . substring ( start , i ) , isTrim , ignoreEmpty ) ;
start = i + 1 ; //i+1同时将start与i保持一致
start = i + 1 ; //i+1同时将start与i保持一致
//检查是否超出范围( 最大允许limit-1个, 剩下一个留给末尾字符串)
if ( limit > 0 & & list . size ( ) > limit - 2 ) {
if ( limit > 0 & & list . size ( ) > limit - 2 ) {
break ;
}
}
@@ -183,7 +184,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.0.8
*/
public static String [ ] splitToArray ( String str , char separator , int limit , boolean isTrim , boolean ignoreEmpty ) {
public static String [ ] splitToArray ( String str , char separator , int limit , boolean isTrim , boolean ignoreEmpty ) {
return toArray ( split ( str , separator , limit , isTrim , ignoreEmpty ) ) ;
}
@@ -199,7 +200,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.0.8
*/
public static List < String > split ( String str , String separator , boolean isTrim , boolean ignoreEmpty ) {
public static List < String > split ( String str , String separator , boolean isTrim , boolean ignoreEmpty ) {
return split ( str , separator , - 1 , isTrim , ignoreEmpty , false ) ;
}
@@ -212,7 +213,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.2.1
*/
public static List < String > splitTrim ( String str , String separator , boolean ignoreEmpty ) {
public static List < String > splitTrim ( String str , String separator , boolean ignoreEmpty ) {
return split ( str , separator , true , ignoreEmpty ) ;
}
@@ -227,7 +228,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.0.8
*/
public static List < String > split ( String str , String separator , int limit , boolean isTrim , boolean ignoreEmpty ) {
public static List < String > split ( String str , String separator , int limit , boolean isTrim , boolean ignoreEmpty ) {
return split ( str , separator , limit , isTrim , ignoreEmpty , false ) ;
}
@@ -241,7 +242,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.2.1
*/
public static List < String > splitTrim ( String str , String separator , int limit , boolean ignoreEmpty ) {
public static List < String > splitTrim ( String str , String separator , int limit , boolean ignoreEmpty ) {
return split ( str , separator , limit , true , ignoreEmpty ) ;
}
@@ -256,7 +257,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.2.1
*/
public static List < String > splitIgnoreCase ( String str , String separator , int limit , boolean isTrim , boolean ignoreEmpty ) {
public static List < String > splitIgnoreCase ( String str , String separator , int limit , boolean isTrim , boolean ignoreEmpty ) {
return split ( str , separator , limit , isTrim , ignoreEmpty , true ) ;
}
@@ -270,7 +271,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.2.1
*/
public static List < String > splitTrimIgnoreCase ( String str , String separator , int limit , boolean ignoreEmpty ) {
public static List < String > splitTrimIgnoreCase ( String str , String separator , int limit , boolean ignoreEmpty ) {
return split ( str , separator , limit , true , ignoreEmpty , true ) ;
}
@@ -286,17 +287,17 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.2.1
*/
public static List < String > split ( String str , String separator , int limit , boolean isTrim , boolean ignoreEmpty , boolean ignoreCase ) {
if ( StrUtil . isEmpty ( str ) ) {
public static List < String > split ( String str , String separator , int limit , boolean isTrim , boolean ignoreEmpty , boolean ignoreCase ) {
if ( StrUtil . isEmpty ( str ) ) {
return new ArrayList < > ( 0 ) ;
}
if ( limit = = 1 ) {
if ( limit = = 1 ) {
return addToList ( new ArrayList < > ( 1 ) , str , isTrim , ignoreEmpty ) ;
}
if ( StrUtil . isEmpty ( separator ) ) { //分隔符为空时按照空白符切分
if ( StrUtil . isEmpty ( separator ) ) { //分隔符为空时按照空白符切分
return split ( str , limit ) ;
} else if ( separator . length ( ) = = 1 ) { //分隔符只有一个字符长度时按照单分隔符切分
} else if ( separator . length ( ) = = 1 ) { //分隔符只有一个字符长度时按照单分隔符切分
return split ( str , separator . charAt ( 0 ) , limit , isTrim , ignoreEmpty , ignoreCase ) ;
}
@@ -305,17 +306,17 @@ public class StrSpliter {
int separatorLen = separator . length ( ) ;
int start = 0 ;
int i = 0 ;
while ( i < len ) {
while ( i < len ) {
i = StrUtil . indexOf ( str , separator , start , ignoreCase ) ;
if ( i > - 1 ) {
if ( i > - 1 ) {
addToList ( list , str . substring ( start , i ) , isTrim , ignoreEmpty ) ;
start = i + separatorLen ;
//检查是否超出范围( 最大允许limit-1个, 剩下一个留给末尾字符串)
if ( limit > 0 & & list . size ( ) > limit - 2 ) {
if ( limit > 0 & & list . size ( ) > limit - 2 ) {
break ;
}
} else {
} else {
break ;
}
}
@@ -333,7 +334,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.0.8
*/
public static String [ ] splitToArray ( String str , String separator , int limit , boolean isTrim , boolean ignoreEmpty ) {
public static String [ ] splitToArray ( String str , String separator , int limit , boolean isTrim , boolean ignoreEmpty ) {
return toArray ( split ( str , separator , limit , isTrim , ignoreEmpty ) ) ;
}
@@ -348,24 +349,24 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.0.8
*/
public static List < String > split ( String str , int limit ) {
if ( StrUtil . isEmpty ( str ) ) {
public static List < String > split ( String str , int limit ) {
if ( StrUtil . isEmpty ( str ) ) {
return new ArrayList < > ( 0 ) ;
}
if ( limit = = 1 ) {
if ( limit = = 1 ) {
return addToList ( new ArrayList < > ( 1 ) , str , true , true ) ;
}
final ArrayList < String > list = new ArrayList < > ( ) ;
int len = str . length ( ) ;
int start = 0 ; //切分后每个部分的起始
for ( int i = 0 ; i < len ; i + + ) {
if ( CharUtil . isBlankChar ( str . charAt ( i ) ) ) {
for ( int i = 0 ; i < len ; i + + ) {
if ( CharUtil . isBlankChar ( str . charAt ( i ) ) ) {
addToList ( list , str . substring ( start , i ) , true , true ) ;
start = i + 1 ; //i+1同时将start与i保持一致
start = i + 1 ; //i+1同时将start与i保持一致
//检查是否超出范围( 最大允许limit-1个, 剩下一个留给末尾字符串)
if ( limit > 0 & & list . size ( ) > limit - 2 ) {
if ( limit > 0 & & list . size ( ) > limit - 2 ) {
break ;
}
}
@@ -381,13 +382,15 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.0.8
*/
public static String [ ] splitToArray ( String str , int limit ) {
public static String [ ] splitToArray ( String str , int limit ) {
return toArray ( split ( str , limit ) ) ;
}
//---------------------------------------------------------------------------------------------- Split by regex
/**
* 通过正则切分字符串
*
* @param str 字符串
* @param separatorRegex 分隔符正则
* @param limit 限制分片数
@@ -396,13 +399,14 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.0.8
*/
public static List < String > splitByRegex ( String str , String separatorRegex , int limit , boolean isTrim , boolean ignoreEmpty ) {
public static List < String > splitByRegex ( String str , String separatorRegex , int limit , boolean isTrim , boolean ignoreEmpty ) {
final Pattern pattern = PatternPool . get ( separatorRegex ) ;
return split ( str , pattern , limit , isTrim , ignoreEmpty ) ;
}
/**
* 通过正则切分字符串
*
* @param str 字符串
* @param separatorPattern 分隔符正则{@link Pattern}
* @param limit 限制分片数
@@ -411,15 +415,15 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.0.8
*/
public static List < String > split ( String str , Pattern separatorPattern , int limit , boolean isTrim , boolean ignoreEmpty ) {
if ( StrUtil . isEmpty ( str ) ) {
public static List < String > split ( String str , Pattern separatorPattern , int limit , boolean isTrim , boolean ignoreEmpty ) {
if ( StrUtil . isEmpty ( str ) ) {
return new ArrayList < > ( 0 ) ;
}
if ( limit = = 1 ) {
if ( limit = = 1 ) {
return addToList ( new ArrayList < > ( 1 ) , str , isTrim , ignoreEmpty ) ;
}
if ( null = = separatorPattern ) { //分隔符为空时按照空白符切分
if ( null = = separatorPattern ) { //分隔符为空时按照空白符切分
return split ( str , limit ) ;
}
@@ -427,12 +431,12 @@ public class StrSpliter {
final ArrayList < String > list = new ArrayList < > ( ) ;
int len = str . length ( ) ;
int start = 0 ;
while ( matcher . find ( ) ) {
while ( matcher . find ( ) ) {
addToList ( list , str . substring ( start , matcher . start ( ) ) , isTrim , ignoreEmpty ) ;
start = matcher . end ( ) ;
//检查是否超出范围( 最大允许limit-1个, 剩下一个留给末尾字符串)
if ( limit > 0 & & list . size ( ) > limit - 2 ) {
if ( limit > 0 & & list . size ( ) > limit - 2 ) {
break ;
}
}
@@ -450,7 +454,7 @@ public class StrSpliter {
* @return 切分后的集合
* @since 3.0.8
*/
public static String [ ] splitToArray ( String str , Pattern separatorPattern , int limit , boolean isTrim , boolean ignoreEmpty ) {
public static String [ ] splitToArray ( String str , Pattern separatorPattern , int limit , boolean isTrim , boolean ignoreEmpty ) {
return toArray ( split ( str , separatorPattern , limit , isTrim , ignoreEmpty ) ) ;
}
@@ -483,19 +487,21 @@ public class StrSpliter {
}
//---------------------------------------------------------------------------------------------------------- Private method start
/**
* 将字符串加入List中
*
* @param list 列表
* @param part 被加入的部分
* @param isTrim 是否去除两端空白符
* @param ignoreEmpty 是否略过空字符串(空字符串不做为一个元素)
* @return 列表
*/
private static List < String > addToList ( List < String > list , String part , boolean isTrim , boolean ignoreEmpty ) {
if ( isTrim ) {
private static List < String > addToList ( List < String > list , String part , boolean isTrim , boolean ignoreEmpty ) {
if ( isTrim ) {
part = StrUtil . trim ( part ) ;
}
if ( false = = ignoreEmpty | | false = = part . isEmpty ( ) ) {
if ( false = = ignoreEmpty | | false = = part . isEmpty ( ) ) {
list . add ( part ) ;
}
return list ;
@@ -503,10 +509,11 @@ public class StrSpliter {
/**
* List转Array
*
* @param list List
* @return Array
*/
private static String [ ] toArray ( List < String > list ) {
private static String [ ] toArray ( List < String > list ) {
return list . toArray ( new String [ 0 ] ) ;
}
//---------------------------------------------------------------------------------------------------------- Private method end