【问题标题】:Visual Basic .substring errorVisual Basic .substring 错误
【发布时间】:2013-01-14 08:09:41
【问题描述】:

我是 VB 新手,我在使用以下代码时遇到了一些问题。

    Dim random As String = "asfdgasfdgasfdgasfd11"
    Dim length As Integer = Nothing

    length = random.Length
    Console.WriteLine(random.Length)
    Console.WriteLine(length)
    Console.WriteLine()
    Console.WriteLine()
    Console.ReadLine()

    If length <= 20 Then
        Console.WriteLine(random.Substring(0, length))
    ElseIf length <= 40 Then
        Console.WriteLine(random.Substring(0, 20))
        Console.WriteLine(random.Substring(20, length))
    End If

    Console.ReadLine()

错误:

" 'System.ArgumentOutOfRangeException' 类型的未处理异常 发生在 mscorlib.dll 中

附加信息:索引和长度必须引用一个位置 在字符串 "

我认为错误是由于(20length))。我尝试将长度分配给一个变量,这样程序就不会崩溃,除非尝试的是特定数量的字符。

我正在尝试使用任何给定长度的变量,如果它大于 20 个字符,则每行只打印 20 个字符。

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    附加信息:索引和长度必须引用一个位置 字符串内

    这就是重点。在第二个 WriteLine 中,您要求打印从第 20 个字符开始的 random 字符串(起始索引正常,有 21 个字符),但随后它要求打印 21 个字符(长度 = 21)。
    是的,startindex + length = 41 超出了字符串限制

    您可以尝试使用

    修复该行
    Console.WriteLine(random.Substring(20, length - 20))
    

    或引入一次打印 20 个字符的 while 循环

    length = random.Length
    Console.WriteLine(random.Length)
    Console.WriteLine(length)
    Console.WriteLine()
    Console.WriteLine()
    Console.ReadLine()
    
    Dim curStart = 0 
    Dim loopCounter = 0
    while(curStart < random.Length)
        Console.WriteLine(random.Substring(curStart, System.Math.Min(20, length - 20 * loopCounter)))
        curStart = curStart + 20
        loopCounter = loopCounter + 1
    End While
    

    【讨论】:

    • 嗨,史蒂夫,感谢您向我展示了 while 循环,它实际上用最少的代码解决了我的所有问题。我能够用.. Console.WriteLine(random.Substring(20, length - 20)) 修复我的初始错误。感谢您的帮助! B
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多