我正在尝试使用以下代码将字符串拆分为单独的行,但由于某种原因,它也会删除字符串中的空格。
Dim calculationText As String
calculationText = File.ReadAllText(fileName)
Dim fields() As String
fields = calculationText.Split(vbCrLf)
当我处于调试器模式时,我查看字段,并且每个元素都有一行字符串,但所有空格和制表符都被删除。
任何原因?
答案 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())
。我怀疑它会有所帮助,但你永远不会知道: - )