From a0c78cf53c2ba3b4c1e83b5061ed154f3ba4d2bb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A4=A7=E7=81=AByzs?= <835476090@qq.com>
Date: Fri, 27 Mar 2020 17:59:55 +0800
Subject: [PATCH] =?UTF-8?q?StrUtil=E6=B7=BB=E5=8A=A0subBetweenAll()?=
=?UTF-8?q?=E6=96=B9=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/cn/hutool/core/lang/Console.java | 28 +++++++
.../java/cn/hutool/core/util/StrUtil.java | 73 +++++++++++++++++--
.../java/cn/hutool/core/lang/ConsoleTest.java | 2 +-
.../java/cn/hutool/core/util/StrUtilTest.java | 6 ++
4 files changed, 103 insertions(+), 6 deletions(-)
diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/Console.java b/hutool-core/src/main/java/cn/hutool/core/lang/Console.java
index d4a01dade..0f1dfd8b5 100644
--- a/hutool-core/src/main/java/cn/hutool/core/lang/Console.java
+++ b/hutool-core/src/main/java/cn/hutool/core/lang/Console.java
@@ -179,4 +179,32 @@ public class Console {
public static String input() {
return scanner().next();
}
+
+ // --------------------------------------------------------------------------------- console lineNumber
+ /**
+ * 返回当前位置+行号 (不支持Lambda、内部类、递归内使用)
+ *
+ * @return 返回当前行号
+ * @author dahuoyzs
+ * @since 5.2.5
+ */
+ public static String where() {
+ StackTraceElement stackTraceElement = new Throwable().getStackTrace()[1];
+ final String className = stackTraceElement.getClassName();
+ final String methodName = stackTraceElement.getMethodName();
+ final String fileName = stackTraceElement.getFileName();
+ final Integer lineNumber = stackTraceElement.getLineNumber();
+ return String.format("%s.%s(%s:%s)", className,methodName,fileName,lineNumber);
+ }
+
+ /**
+ * 返回当前行号 (不支持Lambda、内部类、递归内使用)
+ *
+ * @return 返回当前行号
+ * @since 5.2.5
+ */
+ public static Integer lineNumber() {
+ return new Throwable().getStackTrace()[1].getLineNumber();
+ }
+
}
diff --git a/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java
index 2d75ba827..dff3124b4 100644
--- a/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java
@@ -5,12 +5,8 @@ import java.io.StringWriter;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.Map.Entry;
-import java.util.Set;
import java.util.regex.Pattern;
import cn.hutool.core.comparator.VersionComparator;
@@ -1952,6 +1948,73 @@ public class StrUtil {
return subBetween(str, beforeAndAfter, beforeAndAfter);
}
+ /**
+ * 截取指定字符串多段中间部分,不包括标识字符串
+ *
+ * 栗子:
+ *
+ *
+ * StrUtil.subBetweenAll("wx[b]y[z]", "[", "]") = ["b","z"] + * StrUtil.subBetweenAll(null, *, *) = [] + * StrUtil.subBetweenAll(*, null, *) = [] + * StrUtil.subBetweenAll(*, *, null) = [] + * StrUtil.subBetweenAll("", "", "") = [] + * StrUtil.subBetweenAll("", "", "]") = [] + * StrUtil.subBetweenAll("", "[", "]") = [] + * StrUtil.subBetweenAll("yabcz", "", "") = [] + * StrUtil.subBetweenAll("yabcz", "y", "z") = ["abc"] + * StrUtil.subBetweenAll("yabczyabcz", "y", "z") = ["abc","abc"] + * StrUtil.subBetweenAll("[yabc[zy]abcz]", "[", "]"); = ["zy"] 重叠时只截取内部, + *+ * + * @param str 被切割的字符串 + * @param regexBefore 截取开始的字符串标识 + * @param regexAfter 截取到的字符串标识 + * @return 截取后的字符串 + * @author dahuoyzs + * @since 5.2.5 + */ + public static String[] subBetweenAll(CharSequence str, CharSequence regexBefore, CharSequence regexAfter) { + if (str == null || regexBefore == null || regexAfter == null || str.length() < 1 || regexBefore.length() < 1 || regexAfter.length() < 1) { + return new String[0]; + } + + final String before = regexBefore.toString().replace("\\", ""); + final String after = regexAfter.toString().replace("\\", ""); + final Integer beforeNumber = StrUtil.count(str, before); + final Integer afterNumber = StrUtil.count(str, after); + if (beforeNumber<1||afterNumber<1){ + return new String[0]; + } + + LinkedList