0

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

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

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

有人知道吗?

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

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

6 回答 6

5

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

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

你也可以省略第二个参数,它会得到字符串的其余部分:

Code1.Substring(CharNo + 1)
于 2012-07-13T14:19:58.173 回答
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 或更高版本。

于 2012-07-13T14:11:20.997 回答
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 的位置吗?

于 2012-07-13T14:15:27.400 回答
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)
于 2012-07-13T14:19:27.160 回答
0

不应该是:

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

因为Code1.Length - CharNo给了你一个额外的角色。

前任:

"abc.abcd"

你想要最后 4 个字符,length - charNo结果是 5。因此错误。

于 2012-07-13T14:19:58.770 回答
0

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

于 2012-07-13T14:31:07.950 回答