如何在C#中将带逗号的字符串转换为整数

时间:2014-04-09 17:13:10

标签: c# regex

例如我有一个字符串“99,999 ABC XYZ” 现在我想转换为整数“99999

我制作了一个有效的代码:

 var regex = new Regex("[A-z]");
 linksOnPage = regex.Replace(linksOnPage, "");

 regex = new Regex(" ");
 linksOnPage = regex.Replace(linksOnPage, "");

 int noPage = int.Parse(regex.Replace(linksOnPage, ""), 
                        NumberStyles.AllowThousands);

但我觉得这还不够好,有人能帮助我缩短它吗?

3 个答案:

答案 0 :(得分:3)

Regex将删除所有字母和空格:

var regex = new Regex(" |[A-z]");
linksOnPage = regex.Replace(linksOnPage, "");

您可以使用int.Parse并添加NumberStyles.AllowThousands标记:

int num = int.Parse(linksOnPage , NumberStyles.AllowThousands);

int.TryParse告诉您操作是否成功:

int num;
if (int.TryParse(linksOnPage , NumberStyles.AllowThousands,
                 CultureInfo.InvariantCulture, out num))
{
    // parse successful, use 'num'
}

或者你也可以试试这个:

int num = int.Parse(linksOnPage.Replace(",", ""));

答案 1 :(得分:1)

这是我的方法,虽然不是很短:

    public static void Main(string[] args)
    {
       string input = "99,999 ABC XYZ";
       var chars = input.ToCharArray().ToList();
       var builder = new StringBuilder();
       foreach (var character in chars)
       {
           if (char.IsNumber(character))
               builder.Append(character); 
       }

       int result = 0;
       int.TryParse(builder.ToString(), out result);

       Console.WriteLine(result);
       Console.ReadKey();
    }

答案 2 :(得分:0)

你可以这样做:

    int? ParseIntFromString( string s )
    {
        Match m = rxInt.Match(s) ;
        int? value = m.Success ? int.Parse( m.Value , NumberStyles.AllowLeadingSign|NumberStyles.AllowThousands ) : (int?)null ;
        return value ;
    }
    static Regex rxInt = new Regex( @"^-?\d{1,3}(,\d\d\d)*");

如果没有找到整数值,则返回值为null,如果没有,则返回解析后的值。

请注意,匹配通过^锚定在字符串的开头;如果你想匹配字符串中任何地方的数字,只需删除它。

你也可以踢老派做这样的事情:

public int? ParseIntFromString( string s )
{
  bool found = false ;
  int  acc   = 0 ;
  foreach( char c in s.Where( x => char.IsDigit )
  {
    found = true ;
    acc += c - '0' ;
  }
  return found ? (int?)acc : (int?) null ;
}