从字符串中提取整数

时间:2011-07-27 18:32:56

标签: c# .net

这可能非常简单但我有一个服务返回一个前面带有零的数字的字符串。零的计数是不可预测的,但我需要从值中提取数字。值的长度也不是恒定的。对于前者00001234, 002345667, 0000000, 011, 00000987 - 在所有这些值中,我需要提取1234, 2345667, <no value>, 11, 987。 我尝试过以下代码但它也返回零:

string.Join( null,System.Text.RegularExpressions.Regex.Split( expr, "[^\\d]" ) );

有人可以帮忙吗?

得到我的答案::

我使用stringObj.TrimStart('0')得到它。但我同意使用Int.Parse或Int.TryParse是一种更好的处理方式。希望这对像我这样的人有用!

7 个答案:

答案 0 :(得分:7)

int ret;

if (int.TryParse("0001234", out ret))
{
    return ret.ToString();
}

throw new Exception("eep");

答案 1 :(得分:2)

var numString = "00001234, 002345667, 0000000, 011, 00000987";

// result will contain "1234, 2345667, <no value>, 11, 987"
var result = string.Join(", ", numString.Split().Select(s => 
    {
        var intVal = int.Parse(s);
        return intVal == 0 ? "<no value>" : intVal.ToString();
    }));

答案 2 :(得分:1)

转换为整数并返回字符串?

int num    = Convert.ToInt32(val);
string val = Convert.ToString(num);

答案 3 :(得分:1)

这应该可以解决问题

string s = "0005";
string output = Convert.ToInt32(s.TrimStart(Convert.ToChar("0")));

答案 4 :(得分:1)

正规表达的力量来救援!

static readonly Regex rx = new Regex( @"[^\d]*((0*)([1-9][0-9]*)?)" ) ;
public static IEnumerable<string> ParseNumbers( string s )
{
  for ( Match matched = rx.Match(s) ; matched.Success ; matched = matched.NextMatch() )
  {
    if ( matched.Groups[1].Length > 0 )
    {
      yield return matched.Groups[3].Value ;
    }
  }
}

将字符串"00001234, 002345667, 0000000, 011, 00000987"传递给ParseNumbers()会产生枚举

  • “1234”
  • “2345667”
  • “”
  • “11”
  • “987”

干杯!

答案 5 :(得分:0)

<00> 000000是0不为空....

int intInteger = -1;
int.tryparse(stringNumber,out intInteger);

应该给你一个干净的整数。

答案 6 :(得分:0)

您可以使用Int.Parse将字符串解析为整数。

    String s = "00001234, 002345667, 0000000, 011, 00000987";
    string[] nums= s.Split(',');
foreach (string num in nums
{
    Console.WriteLine(Int.Parse(num)); //you'll need special handling to print "<no value>" when the string is 0000000
}

(实际上没有编译过这个)