|
|
@@ -12,453 +12,457 @@ import java.util.regex.Pattern;
|
|
|
|
|
|
/**
|
|
|
* 字符串切分器
|
|
|
- * @author Looly
|
|
|
*
|
|
|
+ * @author Looly
|
|
|
*/
|
|
|
public class StrSpliter {
|
|
|
-
|
|
|
+
|
|
|
//---------------------------------------------------------------------------------------------- Split by char
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串路径,仅支持Unix分界符:/
|
|
|
- *
|
|
|
+ *
|
|
|
* @param str 被切分的字符串
|
|
|
* @return 切分后的集合
|
|
|
* @since 3.0.8
|
|
|
*/
|
|
|
- public static List<String> splitPath(String str){
|
|
|
+ public static List<String> splitPath(String str) {
|
|
|
return splitPath(str, 0);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串路径,仅支持Unix分界符:/
|
|
|
- *
|
|
|
+ *
|
|
|
* @param str 被切分的字符串
|
|
|
* @return 切分后的集合
|
|
|
* @since 3.0.8
|
|
|
*/
|
|
|
- public static String[] splitPathToArray(String str){
|
|
|
+ public static String[] splitPathToArray(String str) {
|
|
|
return toArray(splitPath(str));
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串路径,仅支持Unix分界符:/
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
* @param limit 限制分片数
|
|
|
* @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);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串路径,仅支持Unix分界符:/
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
* @param limit 限制分片数
|
|
|
* @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));
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
- * @param separator 分隔符字符
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
+ * @param separator 分隔符字符
|
|
|
* @param ignoreEmpty 是否忽略空串
|
|
|
* @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);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
- * @param separator 分隔符字符
|
|
|
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
+ * @param separator 分隔符字符
|
|
|
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
* @param ignoreEmpty 是否忽略空串
|
|
|
* @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);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串,大小写敏感,去除每个元素两边空白符
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
- * @param separator 分隔符字符
|
|
|
- * @param limit 限制分片数,-1不限制
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
+ * @param separator 分隔符字符
|
|
|
+ * @param limit 限制分片数,-1不限制
|
|
|
* @param ignoreEmpty 是否忽略空串
|
|
|
* @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);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串,大小写敏感
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
- * @param separator 分隔符字符
|
|
|
- * @param limit 限制分片数,-1不限制
|
|
|
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
+ * @param separator 分隔符字符
|
|
|
+ * @param limit 限制分片数,-1不限制
|
|
|
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
* @param ignoreEmpty 是否忽略空串
|
|
|
* @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);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串,忽略大小写
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
- * @param separator 分隔符字符
|
|
|
- * @param limit 限制分片数,-1不限制
|
|
|
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
+ * @param separator 分隔符字符
|
|
|
+ * @param limit 限制分片数,-1不限制
|
|
|
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
* @param ignoreEmpty 是否忽略空串
|
|
|
* @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);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
- * @param separator 分隔符字符
|
|
|
- * @param limit 限制分片数,-1不限制
|
|
|
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
+ * @param separator 分隔符字符
|
|
|
+ * @param limit 限制分片数,-1不限制
|
|
|
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
* @param ignoreEmpty 是否忽略空串
|
|
|
- * @param ignoreCase 是否忽略大小写
|
|
|
+ * @param ignoreCase 是否忽略大小写
|
|
|
* @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;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return addToList(list, str.substring(start, len), isTrim, ignoreEmpty);//收尾
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串为字符串数组
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
- * @param separator 分隔符字符
|
|
|
- * @param limit 限制分片数
|
|
|
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
+ * @param separator 分隔符字符
|
|
|
+ * @param limit 限制分片数
|
|
|
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
* @param ignoreEmpty 是否忽略空串
|
|
|
* @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));
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
//---------------------------------------------------------------------------------------------- Split by String
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串,不忽略大小写
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
- * @param separator 分隔符字符串
|
|
|
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
+ * @param separator 分隔符字符串
|
|
|
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
* @param ignoreEmpty 是否忽略空串
|
|
|
* @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);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串,去除每个元素两边空格,忽略大小写
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
- * @param separator 分隔符字符串
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
+ * @param separator 分隔符字符串
|
|
|
* @param ignoreEmpty 是否忽略空串
|
|
|
* @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);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串,不忽略大小写
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
- * @param separator 分隔符字符串
|
|
|
- * @param limit 限制分片数
|
|
|
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
+ * @param separator 分隔符字符串
|
|
|
+ * @param limit 限制分片数
|
|
|
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
* @param ignoreEmpty 是否忽略空串
|
|
|
* @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);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串,去除每个元素两边空格,忽略大小写
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
- * @param separator 分隔符字符串
|
|
|
- * @param limit 限制分片数
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
+ * @param separator 分隔符字符串
|
|
|
+ * @param limit 限制分片数
|
|
|
* @param ignoreEmpty 是否忽略空串
|
|
|
* @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);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串,忽略大小写
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
- * @param separator 分隔符字符串
|
|
|
- * @param limit 限制分片数
|
|
|
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
+ * @param separator 分隔符字符串
|
|
|
+ * @param limit 限制分片数
|
|
|
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
* @param ignoreEmpty 是否忽略空串
|
|
|
* @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);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串,去除每个元素两边空格,忽略大小写
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
- * @param separator 分隔符字符串
|
|
|
- * @param limit 限制分片数
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
+ * @param separator 分隔符字符串
|
|
|
+ * @param limit 限制分片数
|
|
|
* @param ignoreEmpty 是否忽略空串
|
|
|
* @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);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
- * @param separator 分隔符字符串
|
|
|
- * @param limit 限制分片数
|
|
|
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
+ * @param separator 分隔符字符串
|
|
|
+ * @param limit 限制分片数
|
|
|
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
* @param ignoreEmpty 是否忽略空串
|
|
|
- * @param ignoreCase 是否忽略大小写
|
|
|
+ * @param ignoreCase 是否忽略大小写
|
|
|
* @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);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
final ArrayList<String> list = new ArrayList<>();
|
|
|
int len = str.length();
|
|
|
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;
|
|
|
}
|
|
|
}
|
|
|
return addToList(list, str.substring(start, len), isTrim, ignoreEmpty);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串为字符串数组
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
- * @param separator 分隔符字符
|
|
|
- * @param limit 限制分片数
|
|
|
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
+ * @param separator 分隔符字符
|
|
|
+ * @param limit 限制分片数
|
|
|
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
* @param ignoreEmpty 是否忽略空串
|
|
|
* @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));
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
//---------------------------------------------------------------------------------------------- Split by Whitespace
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 使用空白符切分字符串<br>
|
|
|
* 切分后的字符串两边不包含空白符,空串或空白符串并不做为元素之一
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
* @param limit 限制分片数
|
|
|
* @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;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return addToList(list, str.substring(start, len), true, true);//收尾
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 切分字符串为字符串数组
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
* @param limit 限制分片数
|
|
|
* @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 str 字符串
|
|
|
* @param separatorRegex 分隔符正则
|
|
|
- * @param limit 限制分片数
|
|
|
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
- * @param ignoreEmpty 是否忽略空串
|
|
|
+ * @param limit 限制分片数
|
|
|
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
+ * @param ignoreEmpty 是否忽略空串
|
|
|
* @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 str 字符串
|
|
|
* @param separatorPattern 分隔符正则{@link Pattern}
|
|
|
- * @param limit 限制分片数
|
|
|
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
- * @param ignoreEmpty 是否忽略空串
|
|
|
+ * @param limit 限制分片数
|
|
|
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
+ * @param ignoreEmpty 是否忽略空串
|
|
|
* @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);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
final Matcher matcher = separatorPattern.matcher(str);
|
|
|
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;
|
|
|
}
|
|
|
}
|
|
|
return addToList(list, str.substring(start, len), isTrim, ignoreEmpty);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 通过正则切分字符串为字符串数组
|
|
|
- *
|
|
|
- * @param str 被切分的字符串
|
|
|
+ *
|
|
|
+ * @param str 被切分的字符串
|
|
|
* @param separatorPattern 分隔符正则{@link Pattern}
|
|
|
- * @param limit 限制分片数
|
|
|
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
- * @param ignoreEmpty 是否忽略空串
|
|
|
+ * @param limit 限制分片数
|
|
|
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
|
|
|
+ * @param ignoreEmpty 是否忽略空串
|
|
|
* @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));
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
//---------------------------------------------------------------------------------------------- Split by length
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 根据给定长度,将给定字符串截取为多个部分
|
|
|
- *
|
|
|
+ *
|
|
|
* @param str 字符串
|
|
|
* @param len 每一个小节的长度
|
|
|
* @return 截取后的字符串数组
|
|
|
@@ -481,32 +485,35 @@ public class StrSpliter {
|
|
|
}
|
|
|
return strs;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
//---------------------------------------------------------------------------------------------------------- Private method start
|
|
|
+
|
|
|
/**
|
|
|
* 将字符串加入List中
|
|
|
- * @param list 列表
|
|
|
- * @param part 被加入的部分
|
|
|
- * @param isTrim 是否去除两端空白符
|
|
|
+ *
|
|
|
+ * @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;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 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
|