我有一个像VGT501 - GE TIMES MICROWAVE ELECTRONICS
这样的字符串
我希望将这个字符串分成两部分,取决于第一个-
字符。我只想要字符串的第二部分,例如GE TIMES MICROWAVE ELECTRONICS
。
我使用下面的代码:
string StaffID = mystring.Substring(mystring.LastIndexOf("-"), mystring.Length );
但它给了我ArgumentOutofRangeException
错误。
答案 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