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

本文关键字:字符串 int long 自定义 格式 | 更新日期: 2023-09-27 18:25:54

在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/dectal/double,我没有看到任何这样的东西。

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

您可以正则表达式出所有非数字,剩下的是一个可以解析的数字字符串。

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.
}

好吧,你总是可以做

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

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

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

只需Regex掉所有非数字字符,然后解析该字符串。