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