从特定字符数开始的子字符串

时间:2011-04-20 12:43:12

标签: vb.net string substring

如何从特定字符数开始选择字符串的最后一部分。 例如,我希望在第三个逗号之后得到所有文本。但我得到一个错误说 “StartIndex不能小于零。”

Dim testString As String = "part, description, order, get this text, and this text"
Dim result As String = ""
result = testString.Substring(testString.IndexOf(",", 0, 3))

6 个答案:

答案 0 :(得分:3)

继承我的两分钱:

string.Join(",", "aaa,bbb,ccc,ddd,eee".Split(',').Skip(2));

答案 1 :(得分:2)

代码“testString.IndexOf(”,“,0,3)”找不到第三个逗号。它找到第一个逗号从0位开始查看前3个位置(即字符位置0,1,2)。

如果你想在最后一个逗号后面的部分使用这样的东西:

Dim testString As String = "part, description, order, get this text"
Dim result As String = ""
result = testString.Substring(testString.LastIndexOf(",") + 1)

注意+1移动到逗号后面的字符。您还应该首先找到索引并添加检查以确认索引不是-1并且索引< testString.Length也是。

答案 2 :(得分:1)

替代品(我假设你想要最后一个逗号后面的所有文字):

使用LastIndexOf:

' You can add code to check if the LastIndexOf returns a positive number
Dim result As String = testString.SubString(testString.LastIndexOf(",")+1)

正则表达式:

Dim result As String = Regex.Replace(testString, "(.*,)(.*)$", "$2")

答案 3 :(得分:0)

indexOf的第三个参数是要搜索的字符数。您正在,开始搜索0 3个字符 - 这是在字符串par中搜索不存在的逗号,因此返回的索引为{{1}因此你的错误。我认为你需要使用一些递归:

-1

答案 4 :(得分:0)

IndexOf函数仅查找指定字符的“第一”。最后一个参数(在您的情况下为3)指定要检查的字符数,而不是出现的数字。

请参阅Find Nth occurrence of a character in a string

此处指定的函数查找字符的第N次出现。然后在返回的出现时使用substring函数。

另外,您也可以使用正则表达式来查找第n次出现。

public static int NthIndexOf(this string target, string value, int n)
    {
        Match m = Regex.Match(target, "((" + value + ").*?){" + n + "}");

        if (m.Success)
        {
            return m.Groups[2].Captures[n - 1].Index;
        }
        else
        {
             return -1;
        }
    }

答案 5 :(得分:0)

我认为这就是你要找的东西

    Dim testString As String = "part, description, order, get this text"
    Dim resultArray As String() = testString.Split(New Char() {","c}, 3)
    Dim resultString As String = resultArray(2)