در ادامه بحث و در مورد متد سودمند پست شماره 10 :
در کد زیر از روش دیگه ای استفاده شده که بعضی موارد رو اشاره میکنم:
1- از استراکچر در خود اکستنشن استفاده نشده و نیاز به ساختش به اختیار کاربر واگذار شده. بنابراین مستقیم با خود رشته سروکار داره.
2- روش جستجو کلا متفاوت هست و کد جمع و جورتری داره (به معنی بهتر بودن نیست!)
3- whitespace ها رو هم در ابتدا و هم در انتهای رشته پیدا میکنه.
4- یک متد به اسم formatted داره که blank,tab,cr,lf,crlf رو با کارآکترهای دیدنی جایگزین و به تشخیص موقیعت اونها کمک میکنه.
Const vbBlank As Char = " "
Const zBlank = ChrW(&H25CC) ' ◌
Const zTab = ChrW(&H2192) ' →
Const zCrLf = ChrW(&HB6) ' ¶
Const zLf = ChrW(&H2193) ' ↓
Const zCr = ChrW(&HAC) ' ¬
Const zAny = zBlank + zTab + zCrLf + zLf + zCr
<Extension> Function StartWhiteSpaces(str As String) As String
str = NZ(str)
Return str.Substring(0, str.Length - str.TrimStart.Length)
End Function
<Extension> Function EndWhiteSpaces(str As String) As String
str = NZ(str)
Return str.Substring(str.TrimEnd.Length)
End Function
<Extension> Function Formatted(str As String) As String
Return NZ(str).
Replace(ChrW(32), zBlank).
Replace(vbTab, zTab).
Replace(vbCrLf, zCrLf).
Replace(vbLf, zLf).
Replace(vbCr, zCr)
End Function
<Extension> Function CountOfBlanks(str As String) As Integer
Return NZ(str).Count(Function(chr) chr = vbBlank)
End Function
<Extension> Function CountOfTabs(str As String) As Integer
Return NZ(str).Count(Function(chr) chr = vbTab)
End Function
<Extension> Function CountOfCrs(str As String) As Integer
Return NZ(str).Replace(vbCrLf, String.Empty).Count(Function(chr) chr = vbCr)
End Function
<Extension> Function CountOfLfs(str As String) As Integer
Return NZ(str).Replace(vbCrLf, String.Empty).Count(Function(chr) chr = vbLf)
End Function
<Extension> Function CountOfCrLfs(str As String) As Integer
str = NZ(str)
Return (str.Length - str.Replace(vbCrLf, String.Empty).Length) / 2
End Function
<Extension> Function CountOfWhiteSpaces(str As String) As Integer
Return NZ(str).Formatted.Count(Function(chr) zAny.IndexOf(chr) >= 0)
End Function
<Extension> Function HasBlank(str As String) As Boolean
Return NZ(str).IndexOf(vbBlank) >= 0
End Function
<Extension> Function HasTab(str As String) As Boolean
Return NZ(str).IndexOf(vbTab) >= 0
End Function
<Extension> Function HasCr(str As String) As Boolean
Return NZ(str).Replace(vbCrLf, String.Empty).IndexOf(vbCr) >= 0
End Function
<Extension> Function HasLf(str As String) As Boolean
Return NZ(str).Replace(vbCrLf, String.Empty).IndexOf(vbLf) >= 0
End Function
<Extension> Function HasCrLf(str As String) As Boolean
Return NZ(str).IndexOf(vbCrLf) >= 0
End Function
<Extension> Function HasWhiteSpace(str As String) As Boolean
Return NZ(str).Formatted.IndexOfAny({zBlank, zTab, zCr, zLf, zCrLf}) >= 0
End Function
Private Function NZ(str As String) As String
If String.IsNullOrEmpty(str) Then
Return String.Empty
Else
Return str
End If
End Function