子串不是字符串字符串,或者更确切地说,子串不能正常工作

时间:2014-01-31 19:51:21

标签: vb.net string substring

我正在开发一个应用程序,用户可以在其中选择以前呈现给他们的某些值,他们将始终使用这样的特定表单:userData_NorthuserData_South

我需要在_之后的字符串部分,所以显然我尝试像这样做一个子字符串:

Dim rightString = userDataVar.SubString(userDataVar.IndexOf("_"), userDataVar.Length)

我认为我会相信_之后的任何内容,直到字符串结束。但由于某种原因,它会返回Nothing。我怎么会弄错?

3 个答案:

答案 0 :(得分:1)

你误解了Substring的工作原理。您所需要的只是以下内容:

Dim rightString = userDataVar.SubString(userDataVar.IndexOf("_") + 1)

它返回Nothing的原因是因为你在字符串的中途开始,然后要求它去字符串的整个长度,你就超出了它的范围。

答案 1 :(得分:1)

String.Substring的两个参数是startIndexlength - 看起来你期待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("_", "")