我目前正在尝试剥离可能包含连字符符号的数据字符串。
E.g. Basic logic:
string stringin = "test - 9894"; OR Data could be == "test";
if (string contains a hyphen "-"){
Strip stringin;
output would be "test" deleting from the hyphen.
}
Console.WriteLine(stringin);
我正在尝试工作的当前 C# 代码如下所示:
string Details = "hsh4a - 8989";
var regexItem = new Regex("^[^-]*-?[^-]*$");
string stringin;
stringin = Details.ToString();
if (regexItem.IsMatch(stringin)) {
stringin = stringin.Substring(0, stringin.IndexOf("-") - 1); //Strip from the ending chars and - once - is hit.
}
Details = stringin;
Console.WriteLine(Details);
但是当字符串不包含任何连字符时,会拉入错误。
这样做怎么样?
stringin.Split('-')[0].Trim();
您甚至可以使用重载Split
构造函数指定子字符串的最大数量。
stringin.Split('-', 1)[0].Trim();
您的正则表达式要求"零个或一个重复的 -",这意味着即使您的输入不包含连字符,它也匹配。此后你这样做
stringin.Substring(0, stringin.IndexOf("-") - 1)
这给出了超出范围的索引异常(没有连字符可供查找)。
对正则表达式进行简单的更改,无论是否使用,它都可以使用 - 要求"一个或多个连字符":
var regexItem = new Regex("^[^-]*-+[^-]*$");
here -------------------------^
如果原始字符串包含破折号('-'
),则似乎希望(子)字符串'-'
如果没有破折号,则原始字符串。如果是您的情况:
String Details = "hsh4a - 8989";
Details = Details.Substring(Details.IndexOf('-') + 1);
是你,我不会在这种情况下使用正则表达式,它使解决方案比它可能要复杂得多。对于字符串,我敢肯定不会超过几个破折号,我会使用此代码,因为它是一个行并且非常简单:
string str= entryString.Split(new [] {'-'}, StringSplitOptions.RemoveEmptyEntries)[0];
如果您知道一个字符串可能包含大量短划线,则不建议使用此方法 - 它将创建大量不同的字符串,尽管您只在寻找第一个。因此,解决方案将类似于以下代码:
int firstDashIndex = entryString.IndexOf("-");
string str = firstDashIndex > -1? entryString.Substring(0, firstDashIndex) : entryString;
正则表达式。一个简单的 IndexOf 函数将为您提供连字符的索引,然后您可以从那里清理它。
这也是开始编写单元测试的好地方。它们非常适合这样的东西。
代码如下所示:
string inputString = "ho-something";
string outPutString = inputString;
var hyphenIndex = inputString.IndexOf('-');
if (hyphenIndex > -1)
{
outPutString = inputString.Substring(0, hyphenIndex);
}
return outPutString;