一、如果你是高手,一定“识货”,分享给你
二、可应用于文本插入的几种方式: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