Browse Source

add method

Looly 5 years ago
parent
commit
3eaf4702f5

+ 1 - 0
CHANGELOG.md

@@ -7,6 +7,7 @@
 
 ### 新特性
 * 【extra  】     JschUtil增加execByShell方法(issue#I1CYES@Gitee)
+* 【core   】     StrUtil增加subBetweenAll方法,Console增加where和lineNumber方法(issue#812@Github)
 
 ### Bug修复
 * 【extra  】     修复SpringUtil使用devtools重启报错问题

+ 9 - 32
hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java

@@ -1968,50 +1968,27 @@ public class StrUtil {
 	 * StrUtil.subBetweenAll("[yabc[zy]abcz]", "[", "]");   = ["zy"]           重叠时只截取内部,
 	 * </pre>
 	 *
-	 * @param str         被切割的字符串
+	 * @param str    被切割的字符串
 	 * @param prefix 截取开始的字符串标识
-	 * @param suffix  截取到的字符串标识
+	 * @param suffix 截取到的字符串标识
 	 * @return 截取后的字符串
 	 * @author dahuoyzs
 	 * @since 5.2.5
 	 */
 	public static String[] subBetweenAll(CharSequence str, CharSequence prefix, CharSequence suffix) {
-		if(hasEmpty(str, prefix, suffix)) {
-			return new String[0];
-		}
-
-		final int prefixCount = count(str, prefix);
-		final int suffixCount = count(str, suffix);
-		if (prefixCount < 1 || suffixCount < 1) {
+		if (hasEmpty(str, prefix, suffix)) {
 			return new String[0];
 		}
 
-		LinkedList<String> betweenList = new LinkedList<>();
-		if (prefixCount > suffixCount) {
-			String[] fragments = split(str, suffix);
-			for (int i = 0; i < fragments.length - 1; i++) {
-				String fragment = fragments[i];
-				if (fragment.contains(prefix)) {
-					int beforeIndex = StrUtil.lastIndexOf(fragment, prefix, 0, false);
-					String between = fragment.substring(beforeIndex);
-					if (between.length() > 0)
-						betweenList.add(between);
-				}
-			}
-		} else {
-			String[] fragments = split(str, prefix);
-			for (int i = 1; i < fragments.length; i++) {
-				String fragment = fragments[i];
-				if (fragment.contains(suffix)) {
-					int afterIndex = StrUtil.indexOf(fragment, suffix, 0, false);
-					String between = fragment.substring(0, afterIndex);
-					if (between.length() > 0)
-						betweenList.add(between);
-				}
+		final List<String> result = new LinkedList<>();
+		for (String fragment : split(str, prefix)) {
+			int suffixIndex = fragment.indexOf(suffix.toString());
+			if (suffixIndex > 0) {
+				result.add(fragment.substring(0, suffixIndex));
 			}
 		}
 
-		return betweenList.toArray(new String[0]);
+		return result.toArray(new String[0]);
 	}
 
 	/**

+ 5 - 0
hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java

@@ -426,6 +426,11 @@ public class StrUtilTest {
 	public void subBetweenAllTest() {
 		Assert.assertArrayEquals(new String[]{"yz","abc"},StrUtil.subBetweenAll("saho[yz]fdsadp[abc]a","[","]"));
 		Assert.assertArrayEquals(new String[]{"abc"}, StrUtil.subBetweenAll("saho[yzfdsadp[abc]a]","[","]"));
+		Assert.assertArrayEquals(new String[]{"abc", "abc"}, StrUtil.subBetweenAll("yabczyabcz","y","z"));
+		Assert.assertArrayEquals(new String[0], StrUtil.subBetweenAll(null,"y","z"));
+		Assert.assertArrayEquals(new String[0], StrUtil.subBetweenAll("","y","z"));
+		Assert.assertArrayEquals(new String[0], StrUtil.subBetweenAll("abc",null,"z"));
+		Assert.assertArrayEquals(new String[0], StrUtil.subBetweenAll("abc","y",null));
 	}
 	
 }