在.NET字符串变量中查找并替换特定Tab分隔的位置

时间:2014-03-20 12:27:45

标签: .net vb.net string replace

我有一个包含TAB分隔数据的字符串。我想替换字符串中任意TAB位置的文本。

E.g。我想替换一个" N / A"用" -1.0"在TAB角色的第5个分裂。我可以用string_data.split(vbtab)(4).replace(" N / A"," -1.0")识别正确的部分但我正在寻找一个在原始字符串中更改此方法的有效方法?

这似乎有用,有人有什么聪明的吗? LINQ?

Private Sub test()       
Dim input_string As String = "abc:abc:abc:abc:abc:N/A:abc:abc"
        Dim nth_loc As Integer = 5

        Dim ix_s As Integer = IndexOfNth(input_string, ":", nth_loc)
        Dim ix_e As Integer = IndexOfNth(input_string, ":", nth_loc + 1)
        Dim textBefore As String = input_string.Substring(0, ix_s + 1)
        Dim textAfter As String = input_string.Substring(ix_e)
        Dim textbetween As String = input_string.Substring(ix_s + 1, ix_e - ix_s - 1)
        Dim output_string As String = textBefore & textbetween.Replace("N/A", "-1.0") & textAfter
End Sub


    Private Shared Function IndexOfNth(str As String, c As Char, n As Integer) As Integer
            Dim s As Integer = -1

            For i As Integer = 0 To n - 1
                s = str.IndexOf(c, s + 1)

                If s = -1 Then
                    Exit For
                End If
            Next

            Return s
        End Function

1 个答案:

答案 0 :(得分:1)

字符串是不可变的,因此即使使用当前代码,也不会修改原始字符串。

  

" String对象称为immutable(只读),因为在创建"后,其值无法修改。 [MSDN : String Class]

因此,我认为使用.Split()然后.Join()仍然更好:

Dim input_string As String = "abc:abc:abc:abc:abc:N/A:abc:abc"
Dim nth_loc As Integer = 5
Dim split = input_string.Split(":")
split(nth_loc) = "-1.0"
Dim result = String.Join(":", split)

另一方面,LINQ用于查询,而不是数据修改。 LINQ似乎不适合解决这个问题。