一、如果你是高手,一定“識貨”,分享給你
二、可應用于文本插入的幾種方式:6種
三、需要用到以下的幾個函數:
上代碼:
Module TextModule? ??''' <summary>? ? '''?在指定位置插入文本? ??''' </summary>? ? '''?<param?name="originalText">原始文本</param>? ??''' <param name="position">插入位置(從0開始)</param>? ? '''?<param?name="insertText">要插入的文本</param>? ??''' <returns>處理后的文本</returns>? ? Public Function InsertTextAtPosition(originalText As String, position As Integer, insertText As String) As String? ? ? ? If position < 0 Or position > originalText.Length Then? ? ? ? ? ? Return originalText? ? ? ? End If? ? ? ? Return originalText.Insert(position, insertText)? ? End Function? ? '''?<summary>? ??''' 在每個字符間插入指定文本? ? '''?</summary>? ??''' <param name="inputText">原始文本</param>? ? '''?<param?name="separator">分隔符</param>? ??''' <returns>處理后的文本</returns>? ? Public Function InsertBetweenCharacters(inputText As String, separator As String) As String? ? ? ? If String.IsNullOrEmpty(inputText) Then? ? ? ? ? ? Return ""? ? ? ? End IfDim sb As New Text.StringBuilder()? ? ? ? For i As Integer = 0 To inputText.Length - 1? ? ? ? ? ? sb.Append(inputText(i))? ? ? ? ? ? If i < inputText.Length - 1 Then? ? ? ? ? ? ? ? sb.Append(separator)? ? ? ? ? ? End If? ? ? ? Next? ? ? ? Return sb.ToString()? ? End Function'''?<summary>? ??''' 在指定字符串(單/多字符)的前或后插入文本? ? '''?</summary>? ??''' <param name="originalText">原始文本</param>? ? '''?<param?name="targetString">要查找的目標字符串(支持多字符)</param>? ??''' <param name="insertText">要插入的文本</param>? ? '''?<param?name="positionOption">插入位置:'前'?或?'后'</param>? ??''' <param name="occurrenceOption">匹配項選擇:'第一個', '最后一個', '全部'</param>? ? '''?<returns>處理后的文本</returns>Public?Function?InsertTextAroundString(? ? ? ? originalText As String,? ? ? ? targetString As String,? ? ? ? insertText As String,? ? ? ? positionOption As String,? ? ? ? occurrenceOption As String? ? )?As?StringIf?String.IsNullOrEmpty(originalText) OrElse String.IsNullOrEmpty(targetString) Then? ? ? ? ? ??Return?originalText? ? ? ??End?If' 統一轉換為小寫比較(不區分大小寫)? ? ? ? Dim posOption = positionOption.ToLower()? ? ? ? Dim occOption = occurrenceOption.ToLower()' 參數有效性檢查? ? ? ??If?posOption <>?"前"?AndAlso posOption <>?"后"?Then? ? ? ? ? ??Throw?New ArgumentException("positionOption 必須是 '前' 或 '后'")? ? ? ??End?IfIf?occOption <>?"第一個"?AndAlso occOption <>?"最后一個"?AndAlso occOption <>?"全部"?Then? ? ? ? ? ??Throw?New ArgumentException("occurrenceOption 必須是 '第一個', '最后一個' 或 '全部'")? ? ? ??End?If' 處理不同匹配選項? ? ? ? Select Case occOption? ? ? ? ? ? Case "第一個"? ? ? ? ? ? ? ? Dim index = originalText.IndexOf(targetString)? ? ? ? ? ? ? ? If index = -1 Then Return originalText ' 未找到If?posOption =?"前"?Then? ? ? ? ? ? ? ? ? ??Return?originalText.Insert(index, insertText)? ? ? ? ? ? ? ??Else? ? ? ? ? ? ? ? ? ??Return?originalText.Insert(index + targetString.Length, insertText)? ? ? ? ? ? ? ??End?IfCase?"最后一個"? ? ? ? ? ? ? ? Dim index = originalText.LastIndexOf(targetString)? ? ? ? ? ? ? ??If?index =?-1?Then?Return?originalText?' 未找到If posOption = "前" Then? ? ? ? ? ? ? ? ? ? Return originalText.Insert(index, insertText)? ? ? ? ? ? ? ? Else? ? ? ? ? ? ? ? ? ? Return originalText.Insert(index + targetString.Length, insertText)? ? ? ? ? ? ? ? End IfCase "全部"? ? ? ? ? ? ? ? Dim result = originalText? ? ? ? ? ? ? ? Dim addedOffset = 0 ' 用于處理插入后位置偏移? ? ? ? ? ? ? ? Dim positions As New List(Of Integer)()' 獲取所有目標字符串的位置(非重疊匹配)? ? ? ? ? ? ? ? Dim searchIndex As Integer = 0? ? ? ? ? ? ? ? While searchIndex <= result.Length - targetString.Length? ? ? ? ? ? ? ? ? ? Dim matchIndex = result.IndexOf(targetString, searchIndex)? ? ? ? ? ? ? ? ? ? If matchIndex = -1 Then Exit While? ? ? ? ? ? ? ? ? ? positions.Add(matchIndex)? ? ? ? ? ? ? ? ? ? searchIndex = matchIndex + targetString.Length ' 跳過已匹配部分? ? ? ? ? ? ? ??End?While' 從前往后插入(處理位置偏移)? ? ? ? ? ? ? ? For Each pos In positions? ? ? ? ? ? ? ? ? ? Dim insertPos = pos + addedOffset? ? ? ? ? ? ? ? ? ? If posOption = "前" Then? ? ? ? ? ? ? ? ? ? ? ? result = result.Insert(insertPos, insertText)? ? ? ? ? ? ? ? ? ? ? ? addedOffset += insertText.Length? ? ? ? ? ? ? ? ? ? Else? ? ? ? ? ? ? ? ? ? ? ? result = result.Insert(insertPos + targetString.Length, insertText)? ? ? ? ? ? ? ? ? ? ? ? addedOffset += insertText.Length? ? ? ? ? ? ? ? ? ? End If? ? ? ? ? ? ? ? Next? ? ? ? ? ? ? ? Return resultCase Else? ? ? ? ? ? ? ? Return originalText? ? ? ? End Select? ? End Function? ? ' ? ?'示例:? ? ' ? ?Dim testText =?"李小龍張無忌東方不敗"? ??'InsertTextAroundChar(testText, "小龍", "-" 前", "第一個")",?
End Module