【问题标题】:vb.net Splitting string lines into new stringsvb.net 将字符串行拆分为新字符串
【发布时间】:2016-03-13 07:00:50
【问题描述】:

我想将包含多行的字符串拆分为新字符串。

似乎人们不理解我的问题,这里有一些进一步的信息:

我从 XML 文件中将值读出到字符串中。其中一些字符串包含多行。现在我需要一个新字符串(变量)上该字符串的每个值,这样我就可以告诉 Homer 喝啤酒并告诉 Lenny 上床睡觉,而不是告诉整个团队上床睡觉。 (希望这个故事对你有帮助:D)

为了简单起见,我将为此示例定义一个“静态”字符串。

我会在下面写下我的 3 次尝试。我很想听听他们有什么问题。我还用listsenums 进行了尝试,我可以在其中拆分字符串但没有定义新字符串。 但我认为我的问题有一个更简单的解决方案......

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
  1.     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
        Next
    

    3.

    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


【解决方案1】:

事实上,我的问题有一个简单的解决方案。对不起,如果我造成混乱。

Module Module1
    Dim team As String = "Simpson, Homer" & vbCrLf & "Leonard, Lenny" & vbCrLf & "Carlson, Carl"

    Sub Main()
        Dim tm As String() = team.Split(vbLf)

        'Test
        Console.WriteLine(tm(0)) 'Homer
        Console.WriteLine(tm(1)) 'Lenny
        Console.WriteLine(tm(2)) 'Carl
    End Sub

End Module

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    相关资源
    最近更新 更多