是否有一个等同于C的atoi功能的.NET?

Jer*_*ein 4 .net atoi

如果我有一个像这样的字符串:

"26 things"
Run Code Online (Sandbox Code Playgroud)

我想将它转换为26.我只想在字符串开头的整数.

如果我使用C,我只使用atoi功能.但我似乎无法在.NET中找到任何相同的东西.

从字符串开头获取整数的最简单方法是什么?

编辑:对不起,我很暧昧.在字符串中查找空格字符的答案将在许多情况下起作用(甚至可能是我的).我希望在.NET中使用atoi.答案也应该使用像"26things"这样的字符串.谢谢.

Tim*_*mbo 14

这看起来太漂亮了:

string str = "26 things";
int x = int.Parse(str.TakeWhile(ch => char.IsDigit(ch)).Aggregate("", (s, ch) => s + ch));
Run Code Online (Sandbox Code Playgroud)

对于任何真正想要atoi的人来说,这是一个无聊的解决方案:

[System.Runtime.InteropServices.DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int atoi(string str);
Run Code Online (Sandbox Code Playgroud)

  • @CB你甚至可以将其缩短为`int.Parse(new string(str.Trim().TakeWhile(char.IsDigit).ToArray()))` (2认同)

ste*_*ell 10

这应该工作(编辑忽略字符串开头的空格)

int i = int.Parse(Regex.Match("26 things", @"^\s*(\d+)").Groups[1].Value);
Run Code Online (Sandbox Code Playgroud)

如果您担心检查是否有值,如果在字符串的开头没有整数,则可以执行以下操作以给出-1值.

Match oMatch = Regex.Match("26 things", @"^\s*(\d+)");
int i = oMatch.Success ? int.Parse(oMatch.Groups[1].Value) : -1;
Run Code Online (Sandbox Code Playgroud)

  • 哦,请不要这样一个琐碎的任务的正则表达式. (13认同)
  • @Noldorin - 为什么不,它是一个完全有效的正则表达式使用.我不确定为什么这需要一次投票只是因为你会以不同的方式做到这一点? (3认同)
  • @Noldorin:为什么不呢?对于像这样的简单任务,正则表达式实际上很容易阅读.说实话,我发现它比你的解决方案更清晰. (2认同)
  • @Noldorin - 在这种情况下,简单的文本操作不会像正则表达式那样有效或简单.我同意正则表达式可以被滥用,但这是使用正则表达式的一个很好的例子. (2认同)
  • 要匹配atoi,正则表达式应该是^\s*\d + (2认同)