我有一个字符串数组,其值是这样的:
strMystring[0] = "George,Michael - 1234";
我想使用子字符串从字符串中获取数值。我正在尝试使用以下代码,但得到System.ArgumentOutOfRangeException
。
strGSPN[0].Substring(strGSPN[0].IndexOf('-') + 1, strGSPN[0].Length)
如何获得该值?
谢谢。
答案 0 :(得分:2)
您的方法存在的问题是public string Substring (int startIndex, int length);
期望起始索引和长度,而不是终止索引:
-
长度应为总长度减去Split
的索引。
但是,使用var result = strGSPN[0].Split('-')?[1]?.Trim();
会更简单:
categories
请注意,如果字符串中没有分隔符,请在拆分后使用Conditional array and indexer access。
答案 1 :(得分:1)
其他人也发布了类似的答案。
您正在寻找以“-”开头并到达字符串结尾的子字符串。您所做的是从indexOf(“-”)+ 1开始,然后超过字符串的结尾。
string x = "George - 1234";
string b = x.Substring(x.IndexOf("-") + 1, (x.Length - (x.IndexOf("-") + 1)));
答案 2 :(得分:0)
您正在尝试获取字符串中最后一个字符的索引,即Length-1。您仅在使用 strGSPN [0] .Length ,它将超出范围,因为长度从1开始计数,而不是从0开始,但索引从0开始计数,所以当您在string位置获取字符时,Length会将字符串的位置获取到最终字符串之后的第一个位置,从而例外。请尝试以下操作:
strGSPN[0].Substring(strGSPN[0].IndexOf('-')+1, strGSPN[0].Length - 1);
答案 3 :(得分:0)
作为其他答案,第二个参数是所需子字符串的长度。您超出了导致异常的字符串长度。
您可以简单地使用Substring
的重载,而该重载仅接受起始索引 ,而不是自己计算长度或分割字符串。它将占用字符串的其余部分。之后,您只需要修剪结果即可。
var result = strGSPN[0].Substring(strGSPN[0].IndexOf('-')+1).Trim();