Vb.net .split是否删除字符串中的制表符/空格?

Vb.net .split是否删除字符串中的制表符/空格?,vb.net,Vb.net,我试图用下面的代码将一个字符串拆分为单独的行,但出于某种原因,它也删除了字符串中的空格 Dim calculationText As String calculationText = File.ReadAllText(fileName) Dim fields() As String fields = calculationText.Split(vbCrLf) 在调试器模式下,我查看字段,每个元素都有一行字符串,但所有空格和制表符都被删除 有什么原因吗?我得说我从来没有见过它这么做,而且我使用

我试图用下面的代码将一个字符串拆分为单独的行,但出于某种原因,它也删除了字符串中的空格

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

Dim fields() As String
fields = calculationText.Split(vbCrLf)
在调试器模式下,我查看字段,每个元素都有一行字符串,但所有空格和制表符都被删除


有什么原因吗?

我得说我从来没有见过它这么做,而且我使用过String.Split。它们真的消失了吗,还是调试器的一个把戏


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

如果您正在从文件中读取,您可以使用:

    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
那么:

Dim fields() As String = File.ReadAllLines(fileName)
至于为什么string.Split()会做一些奇怪的事情

vbCrLf
是一个字符串,并且接受单个字符串参数的string.split没有重载。如果他打开
选项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

您将在该字符串的第一部分和第二部分之间看到两个换行符。其他一些东西正在剥离这些空间。您可以共享较大的代码块吗?

Doh。。我们同时发布了此解决方案。:-)我会删除我的,因为你实际上有一个代码示例。嗯--他可以用一行代码来完成这件事。是的,乔尔说的。走一行,它更干净,更简洁。另外,ReadAllLines将处理带有cr、lf和crlf分隔符的文件,而且它甚至可以识别字节顺序,因此它是一个更好的经得起未来考验的解决方案。