static void Main(string[] args)
{
string foo = "jason123x40";
char[] foo2 = foo.ToCharArray();
string foo3 = "";
for (int i = 0; i < foo2.Length; i++)
{
int num = 0;
Int32.TryParse(foo2[i].ToString(), out num);
if (num != 0)
{
foo3 += num.ToString();
}
}
Console.WriteLine(foo3);
Console.ReadLine();
}
所以我想说我有一个名为“john10smith250”的字符串。结果应为“10250”。但是我会用我的代码获得“125”。
我过滤掉0的原因是因为我不希望任何非数字字符被视为零。
有没有更好的方法将字符串的一部分转换为int?
答案 0 :(得分:8)
使用LINQ:
var myString = "john10smith250";
var myNumbers = myString.Where(x => char.IsDigit(x)).ToArray();
var myNewString = new String(myNumbers);
答案 1 :(得分:4)
您有一些很好的解决方案可以改变方法并缩短您的代码。为了完整起见,以下是您使代码工作的方式。
您的代码假定如果num
为零,则解析失败:
int num = 0;
Int32.TryParse(foo2[i].ToString(), out num);
if (num != 0) // This is wrong
{
foo3 += num.ToString();
}
你需要改变这样的代码:
int num = 0;
if (Int32.TryParse(foo2[i].ToString(), out num))
{
foo3 += num.ToString();
}
您的代码无效的原因是您忽略了TryParse
的返回值。如果解析失败,则返回false
;如果解析成功,则返回true
,即使解析的数字为零。事实上,这就是TryParse
采用out
参数背后的原因(而不是直接返回值,Int32.Parse
的方式。)
答案 2 :(得分:2)
您可以使用Regx
\d+
是整数的regex
。
所以
string outputstring = Regex.Match(yourstring, @"\d+").Value;
会将该数字作为字符串给出。 Int32.Parse(outputstring)
然后会给你这个号码。
或者你可以这样做
浏览字符串并使用Char.IsDigit
string a = "str123";
string b = string.Empty;
int val;
for (int i=0; i< a.Length; i++)
{
if (Char.IsDigit(a[i]))
b += a[i];
}
if (b.Length>0)
{
val = int.Parse(b);
}
答案 3 :(得分:1)
使用:
var str= "jason123x40";
var number= str.Where(x => char.IsDigit(x)).Select(x => x);
答案 4 :(得分:1)
非常接近你所拥有的......
int parseNumbersFromString(string data)
{
string number = "";
for(int i = 0; i < data.Length; ++i)
{
if(char.IsDigit(data[i]))
number += data[i];
}
return Convert.ToInt32(number);
}
答案 5 :(得分:1)
*您可以使用索引来访问字符串中的字符
* IsDigit检查此char是否为数字,如果条件为真,则将其附加到字符串foo2
string foo = "jason0123x40";
string foo2 = "";
for (int i = 0; i < foo.Length; i++)
{
if (char.IsDigit(foo[i]))
foo2 += foo[i];
}
Console.WriteLine(foo2);
Console.ReadLine();
答案 6 :(得分:0)
您可以使用正则表达式,如下所示:
string foo = "jason123x40";
string foo3 = Regex.Replace(foo, @"\D", "");