在子串中使用.length(VB.NET)

时间:2012-07-13 14:08:43

标签: vb.net indexof string-length

无法弄清楚为什么这不起作用。

我正在尝试分析包含“。”的可变长度字符串。在里面的某个地方,然后剥去“。”和之前的所有人物。这是通过Web服务调用的。

调试时,它可以正常工作,直到它在下面的最后一行,使用浏览器消息: “System.ArgumentOutOfRangeException:索引和长度必须引用字符串中的位置。 参数名称:长度 “

有人有任何想法吗?

下面的Code1是从eform传递给Web服务的输入变量。

Dim CharNo As New Integer
CharNo = Code1.IndexOf(".")
MyCodebookValueStrip.o_Code1 = Code1.Substring(CharNo + 1, (Code1.Length - CharNo))

6 个答案:

答案 0 :(得分:5)

您计算剩余字符串的长度是不正确的。你必须再减一次:

Code1.Substring(CharNo + 1, Code1.Length - CharNo - 1)

您也可以省略第二个参数,它将获得字符串的其余部分:

Code1.Substring(CharNo + 1)

答案 1 :(得分:1)

也许你可以尝试另一种非常简单的方法?

MyCodebookValueStrip.o_Code1 = Code1.Split(".").Last()

如果您完全确定字符串确实包含句点。否则,请使用:

MyCodebookValueStrip.o_Code1 = Code1.Split(".").LastOrDefault()

如果您的字符串不包含句点,则会返回'Nothing'。

如果你的字符串包含多个句点,你将在字符串中的最后一个句点之后获得子字符串。但你确实有其他的做法,例如:

"StringOne.StringTwo.StringThree".Split(".").First()

会给你“StringOne”。

"StringOne.StringTwo.StringThree".Split(".").Last()

会给你“StringThree”。

"StringOne.StringTwo.StringThree".Split(".").Skip(1).Take(1)

会给你“StringTwo”。

您需要引用并导入System.Linq才能使用这些东西,这意味着您需要使用.NET 3.5或更高版本。

答案 2 :(得分:0)

   Dim output As String
   Dim Code1 As String = "test.txt"
   Dim charNo As Integer = Code1.IndexOf('.')
   If ((charNo <> -1) And (Code1.Length <> charNo + 1)) Then
      output = Code1.Substring(charNo, Code1.Length - charNo)
   Else
      output = ""
   End If

以上对我来说完美无缺..可能是你从IndexOf方法获得-1位置?

答案 3 :(得分:0)

问题是你要在起始索引(CharNo + 1)中添加一个,但是你不会从长度减去一个。要纠正它,你应该写:

Code1.Substring(CharNo + 1, (Code1.Length - CharNo - 1))

然而,这是不必要的,因为你真正需要做的就是:

Code1.Substring(CharNo + 1)

另外,您应该检查CharNo + 1是否小于长度,以防句点是文本中的最后一个字符:

If CharNo + 1 < Code1.Length Then
    MyCodebookValueStrip.o_Code1 = Code1.Substring(CharNo + 1)
Else
    MyCodebookValueStrip.o_Code1 = ""
End If

但是,如果您要获取的是文件名的扩展名,那么您应该使用Path类来正确执行(并且更容易):

MyCodebookValueStrip.o_Code1 = Path.GetExtension(Code1)

答案 4 :(得分:0)

不应该是:

Code1.Substring(CharNo + 1, (Code1.Length - CharNo - 1))

因为Code1.Length - CharNo为您提供了额外的字符。

例如:

"abc.abcd"

您想要最后4个字符,length - charNo将产生5.因此错误。

答案 5 :(得分:0)

谢谢大家。我应该意识到它需要-1。 这里有很多正确的答案,我不确定我是否可以选择多个作为“接受的答案”。我试试看。 非常感谢。