只保留字符串中的数字值吗?
我有一些字符串这样只保留字符串中的数字值吗?
string phoneNumber = "(914) 395-1430";
我想带出的parethenses和破折号,换句话说只是不停的数值。
所以输出可能看起来像这样
9143951430
如何获得所需的输出?
回答:
你做任何以下的:
使用正则表达式。您可以使用正则表达式与任何
一个否定的字符类,定义是你不想要的东西(除了十进制数字之外的那些字符)的字符:
private static readonly Regex rxNonDigits = new Regex(@"[^\d]+");
在这种情况下, ,你可以做采取这些方法的执行:
// simply replace the offending substrings with an empty string
private string CleanStringOfNonDigits_V1(string s)
{
if (string.IsNullOrEmpty(s)) return s ;
string cleaned = rxNonDigits.Replace(s, "") ;
return cleaned ;
}
// split the string into an array of good substrings
// using the bad substrings as the delimiter. Then use
// String.Join() to splice things back together.
private string CleanStringOfNonDigits_V2(string s)
{
if (string.IsNullOrEmpty(s)) return s;
string cleaned = String.Join(rxNonDigits.Split(s));
return cleaned ;
}
积极的字符集,它定义你想要什么(小数位数):
private static Regex rxDigits = new Regex(@"[\d]+") ;
在这种情况下,你可以做这样的事情:
private string CleanStringOfNonDigits_V3(string s)
{
if (string.IsNullOrEmpty(s)) return s ;
StringBuilder sb = new StringBuilder() ;
for (Match m = rxDigits.Match(s) ; m.Success ; m = m.NextMatch())
{
sb.Append(m.Value) ;
}
string cleaned = sb.ToString() ;
return cleaned ;
}
使用正则表达式,无论是你不需要的。
你可以直接使用LINQ,因为一个字符串就是一个
IEnumerable<char>
:private string CleanStringOfNonDigits_V4(string s)
{
if (string.IsNullOrEmpty(s)) return s;
string cleaned = new string(s.Where(char.IsDigit).ToArray()) ;
return cleaned;
}
如果你只处理与西方字母,唯一的十进制数字,你会看到的都是ASCII,跳绳
char.IsDigit
可能会买你一个小的性能:private string CleanStringOfNonDigits_V5(string s)
{
if (string.IsNullOrEmpty(s)) return s;
string cleaned = new string(s.Where(c => c-'0' < 10).ToArray()) ;
return cleaned;
}
最后,你可以简单地遍历字符串,夹紧你不想要的数字,像这样:
private string CleanStringOfNonDigits_V6(string s)
{
if (string.IsNullOrEmpty(s)) return s;
StringBuilder sb = new StringBuilder(s.Length) ;
for (int i = 0; i < s.Length; ++i)
{
char c = s[i];
if (c < '0') continue ;
if (c > '9') continue ;
sb.Append(s[i]);
}
string cleaned = sb.ToString();
return cleaned;
}
或者这样:
private string CleanStringOfNonDigits_V7(string s)
{
if (string.IsNullOrEmpty(s)) return s;
StringBuilder sb = new StringBuilder(s);
int j = 0 ;
int i = 0 ;
while (i < sb.Length)
{
bool isDigit = char.IsDigit(sb[i]) ;
if (isDigit)
{
sb[j++] = sb[i++];
}
else
{
++i ;
}
}
sb.Length = j;
string cleaned = sb.ToString();
return cleaned;
}
从一个清晰的立场和代码清洁,版本1是你想要的。很难打败一个班轮。
如果表现很重要,我怀疑版本7是最后一个版本。它创建一个临时的— a StringBuilder()
并在StringBuilder的in-place缓冲区内原地进行转换。
其他选项都做更多的工作。
回答:
使用reg表达式
string result = Regex.Replace(phoneNumber, @"[^\d]", "");
回答:
string phoneNumber = "(914) 395-1430"; var numbers = String.Join("", phoneNumber.Where(char.IsDigit));
回答:
他意味着一切@gleng
Regex rgx = new Regex(@"\D"); str = rgx.Replace(str, "");
回答:
尝试这样的事情
return new String(input.Where(Char.IsDigit).ToArray());
回答:
而不是一个正则表达式,你可以使用LINQ方法:
phoneNumber = String.Concat(phoneNumber.Where(c => c >= '0' && c <= '9'));
或:
phoneNumber = String.Concat(phoneNumber.Where(Char.IsDigit));
以上是 只保留字符串中的数字值吗? 的全部内容, 来源链接: utcz.com/qa/259102.html