我有以下代码;
For Each test In gvForecasts.Columns
Dim test2 = test.caption
test2 = test2.Substring(0, 5)
Next
test2将返回值“第1周”
我希望能够删除此字符串,使其仅返回“1”
但是会返回以下错误消息; “索引和长度必须指代字符串中的位置。”
任何帮助都会很棒!
答案 0 :(得分:4)
Substring方法的第一个参数是你想要开始的索引,下一个参数是你想要抓取的字符数。
试试这段代码:
If test2.Length > 5 Then
test2 = test2.Substring(5, 1)
Else
Throw New Exception("Invalid source string")
End If
&安培;如果您只想消除前5个字符,可以使用以下代码:
If test2.Length > 5 Then
test2 = test2.Substring(5)
Else
Throw New Exception("Invalid source string")
End If
答案 1 :(得分:1)
Your usage of vb.net's subString()
method is incorrect.
具体来说,您的方法是抓取字符串的前5个字符(Week_
)。
它应该用作subString(5)
从第5个开始返回所有字符。
答案 2 :(得分:1)
您想获取每个标记用空格分隔的字符串的最后一个数字吗?
您可以使用String.Split
和此查询:
For Each test In gvForecasts.Columns
Dim words = test.caption.Split() ' splits by all white-space characters
Dim num As Int32
Dim numberParts = From word in words Where Int32.TryParse(word, num)
Dim weekNumber As String = numberParts.LastOrDefault()
Next
Side-Note:正如Psychemaster已经提到的那样,你需要使用String.Substring
的重载和一个参数来省略n
- 字符并接下来。
test2 = test2.Substring(5) ' will throw an exception if the string is not long enough
答案 3 :(得分:0)
当您使用Substring并指定长度超过字符串时,它将引发异常。如果你有一个空字符串,它也会抛出异常。
但是根据你的描述,我认为你真正想要的是最后一个角色。所以你只需要做一些额外的检查:
'check the string has something in it and is the correct length
If Not String.IsNullOrEmpty(s) AndAlso s.Length >= 1 Then
test2 = ""
Else
'get the last character of the string
test2 = s.Substring(s.Length - 1)
End If