C#中的子串()

时间:2016-01-20 19:03:51

标签: c# string

我有一个像VGT501 - GE TIMES MICROWAVE ELECTRONICS这样的字符串 我希望将这个字符串分成两部分,取决于第一个-字符。我只想要字符串的第二部分,例如GE TIMES MICROWAVE ELECTRONICS。 我使用下面的代码:

string StaffID = mystring.Substring(mystring.LastIndexOf("-"), mystring.Length );

但它给了我ArgumentOutofRangeException错误。

3 个答案:

答案 0 :(得分:3)

string.Substring的第二个参数是所需子字符串的长度。如果要转到字符串的末尾,可以使用仅接受起始索引的重载。此外,由于您想要在第一个“ - ”字符之后的所有内容,您实际上想要使用IndexOf而不是LastIndexOf

string StaffID = mystring.Substring(mystring.IndexOf('-') + 1);

IndexOf而不是char上执行string更有意义,并且您需要添加1以便在破折号后获得所有内容。这也处理没有短划线的情况,因为IndexOf将返回-1。如果破折号是字符串中的最后一个字符,那么你最终会得到一个空字符串。

如果您想要将值默认为原始字符串以外的其他内容,如果找不到短划线,则必须执行以下操作。

int lastDash = mystring.IndexOf("-");
string StaffID = whateverDefaultValueYouWant;
if(lastDash != -1)
    StaffID = mystring.Substring(lastDash);

答案 1 :(得分:0)

像这样使用Split

string ss = "VGT501 - GE TIMES MICROWAVE ELECTRONICS";
var result = ss.Split('-')[1];//GE TIMES MICROWAVE ELECTRONICS
//Or  var result = ss.Split('-').Last();

如果您的字符串中没有Split或字符串为空,则使用-您没有收到任何错误。

答案 2 :(得分:0)

如果字符串中没有-的实例或者初始字符串为null,则会在第一个-之后拉出字符串,而不是错误:

string test = "VGT501 - GE TIMES MICROWAVE ELECTRONICS";
var output = (test ?? string.Empty).Substring((test ?? string.Empty).IndexOf('-') + 1).Trim();

output获取值:GE TIMES MICROWAVE ELECTRONICS

string test = "VGT501 GE TIMES MICROWAVE ELECTRONICS";

output获取值:VGT501 GE TIMES MICROWAVE ELECTRONICS

string test = string.Empty;

或者:

string test = null;

output获取string.Empty