C# c语言中从字符串中提取数字#

C# c语言中从字符串中提取数字#,c#,C#,我正在为phone对象编写json反序列化程序 其中一个属性是电话号码。在我的数据库中,我将数字存储为一串数字 我有一个名为IncomingClientJsonPhoneCandidate的字符串,我正在编写一个循环,该循环遍历字符串的每个字符,并在该字符通过byte.trparse时将值添加到字符串生成器中 我想知道有没有更好的办法。 谢谢你的建议 char.IsDigit() (这就是你真正需要的,但我必须在这里添加更多字符限制) (这就是你真正需要的,但我必须在这里添加更多字符限制) 使

我正在为phone对象编写json反序列化程序

其中一个属性是电话号码。在我的数据库中,我将数字存储为一串数字

我有一个名为
IncomingClientJsonPhoneCandidate
的字符串,我正在编写一个循环,该循环遍历字符串的每个字符,并在该字符通过byte.trparse时将值添加到字符串生成器中

我想知道有没有更好的办法。 谢谢你的建议

char.IsDigit()
(这就是你真正需要的,但我必须在这里添加更多字符限制)

(这就是你真正需要的,但我必须在这里添加更多字符限制)

使用正则表达式


使用正则表达式

Int32.TryParse(“13231321”)将节省对循环的需要

Int32.TryParse(“13231321”)将节省对循环的需要

为什么不使用现有的.NET或?

为什么不使用现有的反序列化程序呢

string ExtractNumericCharacters(string s)
{
    return string.IsNullOrEmpty(s) ? s : new string(s.Where(c => char.IsDigit(c)).ToArray());
}
也可以使用方法组转换而不是lambda:

string ExtractNumericCharacters(string s)
{
    return string.IsNullOrEmpty(s) ? s : new string(s.Where(char.IsDigit).ToArray());
}
编辑

要了解为什么不能在此处使用
ToString()
,让我们分离复杂表达式:

string ExtractNumericCharacters(string s)
{
    if (string.IsNullOrEmpty(s))
        return s;

    IEnumerable<char> numericChars = s.Where(char.IsDigit);

    // numericChars is a Linq iterator; if you call ToString() on this object, you'll get the type name.
    // there's no string constructor or StringBuilder Append overload that takes an IEnumerable<char>
    // so we need to get a char[].  The ToArray() method iterates over the WhereEnumerator, copying
    // the sequence into a new array; this is functionally equivalent to using a foreach loop with an if statement.

    char[] numericCharArray = numericChars.ToArray();

    // now we can make a string!

    return new string(numericCharArray);
}
你可以试试

string ExtractNumericCharacters(string s)
{
    return string.IsNullOrEmpty(s) ? s : new string(s.Where(c => char.IsDigit(c)).ToArray());
}
也可以使用方法组转换而不是lambda:

string ExtractNumericCharacters(string s)
{
    return string.IsNullOrEmpty(s) ? s : new string(s.Where(char.IsDigit).ToArray());
}
编辑

要了解为什么不能在此处使用
ToString()
,让我们分离复杂表达式:

string ExtractNumericCharacters(string s)
{
    if (string.IsNullOrEmpty(s))
        return s;

    IEnumerable<char> numericChars = s.Where(char.IsDigit);

    // numericChars is a Linq iterator; if you call ToString() on this object, you'll get the type name.
    // there's no string constructor or StringBuilder Append overload that takes an IEnumerable<char>
    // so we need to get a char[].  The ToArray() method iterates over the WhereEnumerator, copying
    // the sequence into a new array; this is functionally equivalent to using a foreach loop with an if statement.

    char[] numericCharArray = numericChars.ToArray();

    // now we can make a string!

    return new string(numericCharArray);
}


如果要检查字符是否为数字,请使用
char.IsDigit
它应该比
byte.TryParse
@digeAll快。这当然会接受许多人可能无法读取的字符。有310个数字字符;以下是我能不费吹灰之力地遇到的尽可能多的问题:
0123456789०१२३४५६७८९০১২৩৪৫৬৭৮৯੦੧੨੩੪੫੬੭੮੯૦૧૨૩૪૫૬૭૮૯୦୧୨୩୪୫୬୭୮୯௦௧௨௩௪௫௬௭௮௯౦౧౨౩౪౫౬౭౮౯೦೧೨೩೪೫೬೭೮೯൦൧൨൩൪൫൬൭൮൯๐๑๒๓๔๕๖๗๘๙໐໑໒໓໔໕໖໗໘໙༠༡༢༣༤༥༦༧༨༩០១២៣៤៥៦៧៨៩᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩0123456789
如果要检查字符是否为数字,请使用
char.IsDigit
它应该比
byte.TryParse
@digeAll快。这当然会接受许多人可能无法读取的字符。有310个数字字符;以下是我能不费吹灰之力地遇到的尽可能多的问题:
0123456789०१२३४५६७८९০১২৩৪৫৬৭৮৯੦੧੨੩੪੫੬੭੮੯૦૧૨૩૪૫૬૭૮૯୦୧୨୩୪୫୬୭୮୯௦௧௨௩௪௫௬௭௮௯౦౧౨౩౪౫౬౭౮౯೦೧೨೩೪೫೬೭೮೯൦൧൨൩൪൫൬൭൮൯๐๑๒๓๔๕๖๗๘๙໐໑໒໓໔໕໖໗໘໙༠༡༢༣༤༥༦༧༨༩០១២៣៤៥៦៧៨៩᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩0123456789这是怎么回事?关于电话号码,浮点数是从哪里来的?而且
Regex
不是一把大锤吗?即使Regex是正确的工具,在只使用一次的情况下编译Regex也是非常愚蠢的。改用
Regex
上的静态方法。好的,这看起来很接近我想要的。我不熟悉正则表达式:这个正则表达式是只提取数字还是进行一些格式化?我只想提取数字,格式化是在序列化中处理的,有一个长循环(目前)。另外,这个线程安全吗?是的,它应该给你数字和浮点数字,但如果你只想使用像“^\d+$”这样的数字,它不应该做任何格式化,只从数字中提取数字。即使这样做有效(它只抓取第一组?),它仍然需要一个循环来获取所有数字,而且它的性能可能会更低。正则表达式是错误的选择。这是怎么回事?关于电话号码,浮点数是从哪里来的?而且
Regex
不是一把大锤吗?即使Regex是正确的工具,在只使用一次的情况下编译Regex也是非常愚蠢的。改用
Regex
上的静态方法。好的,这看起来很接近我想要的。我不熟悉正则表达式:这个正则表达式是只提取数字还是进行一些格式化?我只想提取数字,格式化是在序列化中处理的,有一个长循环(目前)。另外,这个线程安全吗?是的,它应该给你数字和浮点数字,但如果你只想使用像“^\d+$”这样的数字,它不应该做任何格式化,只从数字中提取数字。即使这样做有效(它只抓取第一组?),它仍然需要一个循环来获取所有数字,而且它的性能可能会更低。正则表达式是一种错误的方法。这将告诉我字符串是否只包含数字;如果我想从一个包含所有种类字符的字符串中提取数字,那会告诉我这个字符串是否只包含数字;如果我想从包含所有种类字符的字符串中提取数字呢?因为在反序列化过程中我实现了一些if/then逻辑。我将.net的javascriptserializer与自定义javascriptconverter一起使用,因为在反序列化过程中我实现了一些if/then逻辑。我正在使用.net的javascriptserializer和自定义javascriptconverter。如果我保持循环的话。我希望摆脱循环和使用re从字符串中提取数字的一行函数调用