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分隔符的文件,而且它甚至可以识别字节顺序,因此它是一个更好的经得起未来考验的解决方案。