在Mid函数中使用IndexOf

时间:2015-07-01 17:03:11

标签: vb.net string

对于大多数人来说,这可能是一个简单的解决方案,但我无法按照语法对其进行操作。

我有这行文字" Part Number123456Price $ 50.00"

我想从中提取部件号,所以我使用此功能......

str = Mid(str, str.IndexOf("Part Number") + 12, str.IndexOf("Price"))

我的结果是str =" 123456价格$ 50.0"每次。我知道部件号的长度可能会有所不同,所以我需要一个坚实的解决方法来解决这个问题。

3 个答案:

答案 0 :(得分:3)

将传统的VB字符串方法(如Mid)与.Net字符串方法(如IndexOf)混合使用会让人感到困惑。 VB方法使用1作为第一个字符的索引,而.Net方法使用0。

以下代码将从字符串

中提取部件号
Dim str As String = "Part Number123456Price$50.00"
Dim iPart As Integer = str.IndexOf("Part Number") + 11
Dim iPrice As Integer = str.IndexOf("Price")
str = str.Substring(iPart, iPrice - iPart).Trim

答案 1 :(得分:1)

Visual Basic的Mid()函数记录为具有三个参数:(1)字符串,(2)字符串中的起始位置,以及(3)要复制的字符数。

所以如果你的字符串是" Part Number123456Price $ 50.00"并且您想将部件号拉成一系列数字," 123456"使用Mid()函数的字符串的一部分,然后您需要找到部件号数字字符串的开头,然后知道数字的位数。

如果您的字符串位于变量str中,那么您可以通过str.IndexOf("Number") + len("Number")之类的内容找到偏移量,它将在字符串" Number"之后提供偏移量。

接下来,您需要找到位数,这样您就可以执行str.IndexOf("Price")之类的操作来查找文本" Price"开始,然后从该偏移量中减去数字开始位置的偏移量。

所有这一切的结果是你需要一些像下面这样的代码。我没有测试过这个源代码,因为我不是VB程序员,因此可能需要进行调整,你可能还需要对数据有效性进行一些检查。

Dim TextNumber as String = "Number"
Dim TextPrice as String = "Price"

iOffset = str.IndexOf(TextNumber) + len(TextNumber)
str = Mid(str, iOffset, str.IndexOf(TextPrice) - iOffset)

答案 2 :(得分:0)

或者,如果Price总是格式为$ 00.00,那么这也可以。

Dim str as String = "Part Number123456Price$50.00" str = str.Remove(str.IndexOf("Price"))