如何从C#中的字符串获取第二部分

时间:2018-10-10 18:59:15

标签: c# string

我有一个字符串数组,其值是这样的:

strMystring[0] = "George,Michael   -  1234";

我想使用子字符串从字符串中获取数值。我正在尝试使用以下代码,但得到System.ArgumentOutOfRangeException

strGSPN[0].Substring(strGSPN[0].IndexOf('-') + 1, strGSPN[0].Length)

如何获得该值?

谢谢。

4 个答案:

答案 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();

MSDN String.Substring(int)