使用自定义格式字符串将字符串解析为int / long

时间:2012-02-27 19:32:59

标签: c# .net parsing int custom-formatting

在C#.Net中,这是一个如何使用自定义格式字符串将数字格式化为字符串的简单示例: (例子来自:http://www.csharp-examples.net/string-format-int/

String.Format("{0:+### ### ### ###}", 447900123456); // "+447 900 123 456"
String.Format("{0:##-####-####}", 8958712551);       // "89-5871-2551"

有没有办法将这个格式化的字符串转换回长整数?有没有办法做到这一点:

long PhoneNumber = Int32.Parse("89-5871-2551", "{0:##-####-####}");

我看到DateTime有一个ParseExact方法可以很好地完成这项工作。但是我没有看到int / long / decimal / double这样的东西。

3 个答案:

答案 0 :(得分:4)

你可以正则输出所有非数字数字,你剩下的是一串你可以解析的数字。

var myPhoneNumber = "89-5871-2551";
var strippedPhoneNumber = Regex.Replace(myPhoneNumber, @"[^\d]", "");
int intRepresentation;

if (Int32.TryParse(strippedPhoneNumber, out intRepresentation))
{
    // It was assigned, intRepresentation = 8958712551
    // now you can use intRepresentation.

} else {
    // It was not assigned, intRepresentation is still null.
}

答案 1 :(得分:1)

嗯,你总是可以做到

long PhoneNumber = Int32.Parse("89-5871-2551".
                Replace(new char[]{'-','+',whatever..}).Trim());

顺便说一句,考虑到你正在解析从某些IO收到的字符串,我建议使用更安全的(在转换方面)Int32.TryParse方法。

描述的方式实际上并不存在。

答案 2 :(得分:0)

只需正则表达所有非数字字符,然后解析该字符串。