溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

VB.NET中怎么實現(xiàn)字符串轉義

發(fā)布時間:2021-07-19 16:05:42 來源:億速云 閱讀:248 作者:Leah 欄目:編程語言

本篇文章為大家展示了VB.NET中怎么實現(xiàn)字符串轉義,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

C#中可以寫

  1. string s = "This is a 
    string with newline.\n"

而VB.NET字符串轉義的只能寫

  1. Dim s = "This is a string 
    with newline."
     & vbLf 

人們渴望一個和C#中的"@"字符串正好相反的語法:

  1. string s = @"This is a string 
    with '\n' literal.\n";Dim s = 
    @"This is a string with newline.\n" 

但是,這種VB.NET字符串轉義語法還沒有被加入。

于是,我通過使用擴展函數(shù),實現(xiàn)了比較接近的語法。

  1. Dim s = "This is a string 
    with newline.\n".Descape 

另外,還對String.Format進行了類似處理

  1. Dim s2 = "This is a 
    string that is {0}".
    Formats("formated.") 

VB.NET字符串轉義的具體實現(xiàn)如下:

  1. '  

  2. ' File: StringDescape.vb  

  3. ' Description: VB.Net字符串轉義語法糖 
    < Visual Basic 9> 

  4. ' Version: 2008.09.28.  

  5. ' (cc) F.R.C. 按照 Creative 
    Commons Public Domain Dedication L
    icense 捐獻  

  6. ' http://creativecommons.org/
    licenses/publicdomain/  

Imports System  Imports System.Collections.Generic  Imports System.Text  Imports System.Text.RegularExpressions  Imports System.Runtime.CompilerServices  Imports Microsoft.VisualBasic
  1. /**/''' < summary>字符串轉義< /summary> 

  2. Public Module StringDescapeModule StringDescape  

  3. /**/''' < summary>字符串反轉義函數(shù)< /summary> 

  4. ''' < remarks> 

  5. ''' \0 與null \u0000 匹配  

  6. ''' \a 與響鈴(警報)\u0007 匹配   

  7. ''' \b 與退格符 \u0008 匹配  

  8. ''' \t 與 Tab 符 \u0009 匹配   

  9. ''' \r 與回車符 \u000D 匹配  

  10. ''' \v 與垂直 Tab 符 \u000B 匹配  

  11. ''' \f 與換頁符 \u000C 匹配  

  12. ''' \n 與換行符 \u000A 匹配  

  13. ''' \e 與 Esc 符 \u001B 匹配  

  14. ''' \x?? 與 \u00?? 匹配  

  15. ''' \u???? 與對應的Unicode字符對應  

  16. ''' < /remarks> 

  17. < Extension()> Public Function Descape
    ()Function Descape(ByVal This As 
    String) As String  

  18. Dim m = r.Match(This)  

  19. If Not m.Success Then Throw New 
    InvalidCastException 

  1. Dim ss As New SortedList(Of
     Integer, String)  

  2. For Each c As Capture In m.Groups.
    Item("SingleEscape").Captures  

  3. ss.Add(c.Index, SingleEscapeDict
    (c.Value))  

  4. Next  

  5. For Each c As Capture In m.Groups.
    Item("UnicodeEscape").Captures  

  6. ss.Add(c.Index, ChrW(CInt("&H" 
    & c.Value)))  

  7. Next  

  8. For Each c As Capture In m.Groups.
    Item("ErrorEscape").Captures  

  9. Throw New ArgumentException("
    ErrorEscape: Ch " & (c.Index + 1) 
    & " " & c.Value)  

  10. Next  

  11. For Each c As Capture In m.Groups.
    Item("Normal").Captures  

  12. ss.Add(c.Index, c.Value)  

  13. Next  

  14. Dim sb As New StringBuilder  

  15. For Each s In ss.Values  

  16. sb.Append(s)  

  17. Next  

  18. Return sb.ToString  

  19. End Function 

  1. /**/''' < summary>將指定的 String 
    中的格式項替換為指定的 Object 實例的值
    的文本等效項。< /summary> 

  2. < Extension()> Public Function Formats
    ()Function Formats(ByVal This As String, 
    ByVal arg0 As Object) As String  

  3. Return String.Format(This, arg0)  

  4. End Function  

  5. /**/''' < summary>將指定的 String 
    中的格式項替換為兩個指定的 Object 實例的
    值的文本等效項。< /summary> 

  6. < Extension()> Public Function Formats
    ()Function Formats(ByVal This As String,
     ByVal arg0 As Object, ByVal arg1 As
     Object) As String  

  7. Return String.Format(This, arg0, arg1)  

  8. End Function  

  9. /**/''' < summary>將指定的 String 中的
    格式項替換為三個指定的 Object 實例的值的文本
    等效項。< /summary> 

  10. < Extension()> Public Function Formats
    ()Function Formats(ByVal This As String, 
    ByVal arg0 As Object, ByVal arg1 As Object, 
    ByVal arg2 As Object) As String  

  11. Return String.Format(This, arg0, arg1, arg2)  

  12. End Function  

  13. /**/''' < summary>將指定 String 中的格式
    項替換為指定數(shù)組中相應 Object 實例的值的文
    本等效項。< /summary> 

  14. < Extension()> Public Function Formats()
    Function Formats(ByVal This As String, 
    ByVal ParamArray args As Object()) As String  

  15. Return String.Format(This, args)  

  16. End Function  

  17. /**/''' < summary>將指定 String 中的格式項
    替換為指定數(shù)組中相應 Object 實例的值的文本等效項。
    指定的參數(shù)提供區(qū)域性特定的格式設置信息。< /summary> 

  18. < Extension()> Public Function Formats()Function 
    Formats(ByVal This As String, ByVal provider 
    As IFormatProvider, ByVal ParamArray args 
    As Object()) As String  

  19. Return String.Format(provider, This, args)  

  20. End Function 


  1. Private ReadOnly Property SingleEscapeDict()
    Property SingleEscapeDict() As Dictionary
    (Of String, String)  

  2. Get  

  3. Static d As Dictionary(Of String, String)  

  4. If d IsNot Nothing Then Return d  

  5. d = New Dictionary(Of String, String)  

  6. d.Add("\", "\") 'backslash  

  7. d.Add("0", ChrW(0)) 'null  

  8. d.Add("a", ChrW(7)) 'alert (beep)  

  9. d.Add("b", ChrW(8)) 'backspace  

  10. d.Add("f", ChrW(&HC)) 'form feed  

  11. d.Add("n", ChrW(&HA)) 'newline (lf)  

  12. d.Add("r", ChrW(&HD)) 'carriage return (cr)   

  13. d.Add("t", ChrW(9)) 'horizontal tab   

  14. d.Add("v", ChrW(&HB)) 'vertical tab  

  15. Return d  

  16. End Get  

  17. End Property  

  18. Private ReadOnly Property SingleEscapes
    ()Property SingleEscapes() As String  

  19. Get  

  20. Static s As String  

  21. If s IsNot Nothing Then Return s  

  22. Dim Chars As New List(Of String)  

  23. For Each c In "\0abfnrtv"  

  24. Chars.Add(Regex.Escape(c))  

  25. Next  

  26. s = "\\(?< SingleEscape>" & String.
    Join("|", Chars.ToArray) & ")"  

  27. Return s  

  28. End Get  

  29. End Property  

  30. Private UnicodeEscapes As String = 
    "\\[uU](?< UnicodeEscape>[0-9A-Fa-f]{4})
    |\\x(?< UnicodeEscape>[0-9A-Fa-f]{2})" 

  31. Private ErrorEscapes As String = 
    "(?< ErrorEscape>\\)" 

  32. Private Normal As String = "(?< Normal>.)" 

  33. Private r As New Regex("^" & "(
    " & SingleEscapes & "|" & Unicode
    Escapes & "|" & ErrorEscapes & "|" & 
    Normal & ")*" & "$", RegexOptions.
    ExplicitCapture)  

  34. End Module 

上述內(nèi)容就是VB.NET中怎么實現(xiàn)字符串轉義,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI