.split删除字符串中的制表符/空格?

时间:2009-06-16 01:27:19

标签: vb.net

我正在尝试使用以下代码将字符串拆分为单独的行,但由于某种原因,它也会删除字符串中的空格。

Dim calculationText As String
calculationText = File.ReadAllText(fileName)

Dim fields() As String
fields = calculationText.Split(vbCrLf)

当我处于调试器模式时,我查看字段,并且每个元素都有一行字符串,但所有空格和制表符都被删除。

任何原因?

3 个答案:

答案 0 :(得分:2)

如果您正在阅读文件,可以使用:

    Sub Main()
    Dim fields As New List(Of String)

    ' read file into list
    Using sr As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(filename)
        Try
            Do While sr.Peek() >= 0
                fields.Add(sr.ReadLine())
            Loop
        Finally
            If sr IsNot Nothing Then sr.Close()
        End Try
    End Using

    ' check results
    For Each line As String In fields
        Console.WriteLine(line)
    Next
End Sub

答案 1 :(得分:1)

如何'回合:

Dim fields() As String = File.ReadAllLines(fileName)

至于为什么string.Split()做了奇怪的事情......

vbCrLf是一个字符串,string.split没有重载接受单个字符串参数。如果他打开Option Explicit它甚至不会编译,但由于它已关闭,vbCrLf可以被解释为一个字符数组。在这段代码中,这正是发生的事情:

Sub Main()
    Dim z As String = "The quick brown" & vbCrLf & " fox jumps over the lazy dogs."
    Dim a() As String = z.Split(vbCrLf)
    For Each c As String In a
        Console.WriteLine(c)
    Next
    Console.ReadKey(True)
End Sub

你会在该字符串的第一和第二部分之间看到两个换行符。其他东西正在剥离空间。你能分享更大的代码块吗?

答案 2 :(得分:0)

要说我从未见过这样做,而且我已经广泛使用了String.Split。它们真的真的消失了,还是调试器的技巧?

实际上没有任何.Split方法将一个字符串作为参数,因此VB编译器会在幕后做“事情”以选择不同的重载。要尝试强制执行正确的重载,您可以尝试calculationText.Split(vbCrLf.ToCharArray())。我怀疑它会有所帮助,但你永远不会知道: - )