【发布时间】:2016-07-19 02:35:34
【问题描述】:
在具有字母前缀的字符串中修剪所有字母的更快方法是什么? 例如,输入 sting "ABC12345" ,我希望仅将 12345 作为输出。 谢谢。
【问题讨论】:
标签: c#
在具有字母前缀的字符串中修剪所有字母的更快方法是什么? 例如,输入 sting "ABC12345" ,我希望仅将 12345 作为输出。 谢谢。
【问题讨论】:
标签: c#
请使用“char.IsDigit”,试试这个:
static void Main(string[] args)
{
var input = "ABC12345";
var numeric = new String(input.Where(char.IsDigit).ToArray());
Console.Read();
}
【讨论】:
您可以使用Regular Expressions 修剪字母前缀
var input = "ABC123";
var trimmed = Regex.Replace(input, @"^[A-Za-z]+", "");
// trimmed = "123"
replace 方法的正则表达式(第二个参数)^[A-Za-z]+ 完成了大部分工作,它使用以下规则定义要替换的内容:
^ 字符确保匹配只存在于字符串的开头[A-Za-z] 将匹配任何大写或小写字母+ 表示大写或小写字母将尽可能连续匹配多次
由于这是Replace 方法,因此第三个参数将所有匹配项替换为空字符串。
【讨论】:
其他答案似乎回答了什么是最慢的方式..所以如果你真的需要最快的方式,那么你可以找到第一个数字的索引并获取子字符串:
string input = "ABC12345";
int i = 0;
while ( input[i] < '0' || input[i] > '9' ) i++;
string output = input.Substring(i);
获取值的最短方法可能是 VB Val 方法:
double value = Microsoft.VisualBasic.Conversion.Val("ABC12345"); // 12345.0
【讨论】:
char.IsNumber()提供的附加功能可能会很有用
char.IsNumber() 会慢一些,因为它有一些额外的 unicode 检查 referencesource.microsoft.com/#mscorlib/system/…
您必须使用正则表达式。您似乎只在寻找数字而不是字母。
示例:
string result =
System.Text.RegularExpressions.Regex.Replace("Your input string", @"\D+", string.Empty);
【讨论】: