Skip to content

Commit a9a06d1

Browse files
committed
🎨 substring
1 parent e24d3d4 commit a9a06d1

File tree

1 file changed

+28
-3
lines changed

1 file changed

+28
-3
lines changed

src/BD.Common8.Bcl/Extensions/StringExtensions.Substring.cs

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)