如何从特定字符数开始选择字符串的最后一部分。 例如,我希望在第三个逗号之后得到所有文本。但我得到一个错误说 “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))
答案 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)