我正在开发一个应用程序,用户可以在其中选择以前呈现给他们的某些值,他们将始终使用这样的特定表单:userData_North
,userData_South
。
我需要在_
之后的字符串部分,所以显然我尝试像这样做一个子字符串:
Dim rightString = userDataVar.SubString(userDataVar.IndexOf("_"), userDataVar.Length)
我认为我会相信_
之后的任何内容,直到字符串结束。但由于某种原因,它会返回Nothing
。我怎么会弄错?
答案 0 :(得分:1)
你误解了Substring的工作原理。您所需要的只是以下内容:
Dim rightString = userDataVar.SubString(userDataVar.IndexOf("_") + 1)
它返回Nothing
的原因是因为你在字符串的中途开始,然后要求它去字符串的整个长度,你就超出了它的范围。
答案 1 :(得分:1)
String.Substring
的两个参数是startIndex
和length
- 看起来你期待startIndex' and
endIndex'(ala JavaScript的substring
)。
它实际上抛出了一个ArgumentOutOfRange
异常(如本案例所述),这意味着你可能正在运行On Error Resume Next
或以其他方式隐藏异常 - 这总是使调试变得更加困难(并且不是非常适合生产。)
正如其他人所提到的,还有方便的方法来获得适合您的用例的剩余长度。否则,您需要减去IndexOf
。
作为替代方案,您还可以考虑使用String.Split
- 特别是如果您打算放弃“_”分隔符(在这种情况下,您需要+1
IndexOf
答案 2 :(得分:0)
你准备去北方还是南方?
Dim userDataVar As String = "userData_South"
Dim startIndex = userDataVar.IndexOf("_")
Dim rightString = userDataVar.Substring(startIndex)
Dim getNorthSouth = rightString.Replace("_", "")