【发布时间】:2016-03-13 07:00:50
【问题描述】:
我想将包含多行的字符串拆分为新字符串。
似乎人们不理解我的问题,这里有一些进一步的信息:
我从 XML 文件中将值读出到字符串中。其中一些字符串包含多行。现在我需要一个新字符串(变量)上该字符串的每个值,这样我就可以告诉 Homer 喝啤酒并告诉 Lenny 上床睡觉,而不是告诉整个团队上床睡觉。 (希望这个故事对你有帮助:D)
为了简单起见,我将为此示例定义一个“静态”字符串。
我会在下面写下我的 3 次尝试。我很想听听他们有什么问题。我还用lists 和enums 进行了尝试,我可以在其中拆分字符串但没有定义新字符串。
但我认为我的问题有一个更简单的解决方案......
Dim team As String = "Simpson, Homer" & vbCrLf & "Leonard, Lenny" & vbCrLf & "Carlson, Carl"
1.
Dim objReader As New StringReader(team)
Dim tm() As String
Dim i As Integer = 1
Do While objReader.Peek() <> -1
tm(i) = objReader.ReadLine() & vbNewLine
i = i + 1
Loop
-
Dim i As Integer = 0 For Each Line As String In team.Split(New [Char]() {CChar(vbTab)}) Dim tm(i) As String = ReadLine(team, i) i = i + 1 Next3.
Dim tm() As String Dim i As Integer = 0 Dim objReader As New StringReader(team) Do While objReader.Peek() <> -1 tm(i) = ReadLine(team, i) i = i + 1 Loop
以及2.和3.中用到的函数。
Public Function ReadLine(ByVal sFile As String, Optional ByVal nLine As Long = 1) As String
Dim sLines() As String
Dim oFSO As Object
Dim oFile As Object
On Error GoTo ErrHandler
oFSO = CreateObject("Scripting.FileSystemObject")
If oFSO.FileExists(sFile) Then
oFile = oFSO.OpenTextFile(sFile)
sLines = Split(oFile.ReadAll, vbCrLf)
oFile.Close()
Select Case Math.Sign(nLine)
Case 1
ReadLine = sLines(nLine - 1)
Case -1
ReadLine = sLines(UBound(sLines) + nLine + 1)
End Select
End If
ErrHandler:
oFile = Nothing
oFSO = Nothing
End Function
提前感谢大家分享的想法。
【问题讨论】:
-
您只是在寻找代码审查吗?什么“不起作用”?为什么
Split()字符串扩展方法不够用? -
确切的问题是什么?执行代码时是否遇到任何错误?预期和实际行为是否匹配?函数
ReadLine的一个提示:当前您正在循环中打开和读取文件。我会将其更改为仅读取文本文件的内容一次并将其存储在由换行符拆分的字符串集合中,或者至少仅声明一次文件读取器对象。 -
@slugster 我所有的尝试都无法正常工作,因为我的 VB Express 10 在
tm(i)下划线了,因为它要求一个值,但是如果我定义一个值,它就不再是动态的了。 -
@AlexB。尝试 1 和 3 在
tm(i) =停止运行,并显示消息“未定义对象引用”,而尝试 2 根本不会运行,因为tm(i)也带有下划线,并带有消息“不允许显式初始化” 感谢您对函数的提示 :)我会看看我能做什么:D -
除非我遗漏了一些东西,否则你永远不会声明数组的大小,或者在添加新字符串时根据需要重新调整它。
标签: vb.net string arraylist split