@@ -6,8 +6,8 @@ public static partial class StringExtensions // Substring
66 /// 获取两个字符串中间的字符串
77 /// </summary>
88 /// <param name="s">要处理的字符串,例 ABCD</param>
9- /// <param name="left">第1个字符串 ,例 AB</param>
10- /// <param name="right">第2个字符串 ,例 D</param>
9+ /// <param name="left">第 1 个字符串 ,例 AB</param>
10+ /// <param name="right">第 2 个字符串 ,例 D</param>
1111 /// <param name="isContains">是否包含标志字符串</param>
1212 /// <returns>例 返回C</returns>
1313 [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
@@ -16,12 +16,37 @@ public static string Substring(this string s, string left, string right, bool is
1616 int i1 = s . IndexOf ( left ) ;
1717 if ( i1 < 0 ) // 找不到返回空
1818 return "" ;
19- int i2 = s . IndexOf ( right , i1 + left . Length ) ; // 从找到的第1个字符串后再去找
19+ int i2 = s . IndexOf ( right , i1 + left . Length ) ; // 从找到的第 1 个字符串后再去找
2020 if ( i2 < 0 ) // 找不到返回空
2121 return "" ;
2222 if ( isContains )
2323 return s . Substring ( i1 , i2 - i1 + left . Length ) ;
2424 else
2525 return s . Substring ( i1 + left . Length , i2 - i1 - left . Length ) ;
2626 }
27+
28+ #if NETCOREAPP
29+ /// <summary>
30+ /// 获取两个字符串中间的 ReadOnlySpan
31+ /// </summary>
32+ /// <param name="s">要处理的字符串,例 ABCD</param>
33+ /// <param name="left">第 1 个字符串,例 AB</param>
34+ /// <param name="right">第 2 个字符串,例 D</param>
35+ /// <param name="isContains">是否包含标志字符串</param>
36+ /// <returns>例 返回C</returns>
37+ [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
38+ public static ReadOnlySpan < char > SubstringAsSpan ( this string s , string left , string right , bool isContains = false )
39+ {
40+ int i1 = s . IndexOf ( left ) ;
41+ if ( i1 < 0 ) // 找不到返回空
42+ return "" ;
43+ int i2 = s . IndexOf ( right , i1 + left . Length ) ; // 从找到的第 1 个字符串后再去找
44+ if ( i2 < 0 ) // 找不到返回空
45+ return "" ;
46+ if ( isContains )
47+ return s . AsSpan ( ) . Slice ( i1 , i2 - i1 + left . Length ) ;
48+ else
49+ return s . AsSpan ( ) . Slice ( i1 + left . Length , i2 - i1 - left . Length ) ;
50+ }
51+ #endif
2752}
0 commit comments