我有一个像
这样的字符串 XQ74MNT8244A
我要从字符串中删除所有char
。
所以输出就像
748244
怎么做? 请帮我这样做
答案 0 :(得分:23)
new string("XQ74MNT8244A".Where(char.IsDigit).ToArray()) == "748244"
答案 1 :(得分:11)
两个选项。在.Net 4上使用Linq(在3.5上它是相似的 - 它没有所有方法的那么多重载):
string s1 = String.Concat(str.Where(Char.IsDigit));
或者,使用正则表达式:
string s2 = Regex.Replace(str, @"\D+", "");
我应该补充说IsDigit
和\D
具有Unicode感知功能,因此除了0-9之外它还会接受相当多的数字,例如"542abc٣٤"
。
您可以轻松地将其调整为0
和9
之间或[^0-9]+
之间的支票。
答案 2 :(得分:6)
string value = "HTQ7899HBVxzzxx";
Console.WriteLine(new string(
value.Where(x => (x >= '0' && x <= '9'))
.ToArray()));
答案 3 :(得分:2)
为您执行此操作的扩展方法(和重载)如何:
public static string NumbersOnly(this string Instring)
{
return Instring.NumbersOnly("");
}
public static string NumbersOnly(this string Instring, string AlsoAllowed)
{
char[] aChar = Instring.ToCharArray();
int intCount = 0;
string strTemp = "";
for (intCount = 0; intCount <= Instring.Length - 1; intCount++)
{
if (char.IsNumber(aChar[intCount]) || AlsoAllowed.IndexOf(aChar[intCount]) > -1)
{
strTemp = strTemp + aChar[intCount];
}
}
return strTemp;
}
重载是这样你可以保留“ - ”,“$”或“。”同样,如果你愿意(而不是严格的数字)。
用法:
string numsOnly = "XQ74MNT8244A".NumbersOnly();
答案 4 :(得分:2)
如果您只需要数字并且您真的想要Linq试试这个:
youstring.ToCharArray().Where(x => char.IsDigit(x)).ToArray();
答案 5 :(得分:2)
使用LINQ:
public string FilterString(string input)
{
return new string(input.Where(char.IsNumber).ToArray());
}
答案 6 :(得分:2)
这样的东西?
"XQ74MNT8244A".ToCharArray().Where(x => { var i = 0; return Int32.TryParse(x.ToString(), out i); })
答案 7 :(得分:2)
string s = "XQ74MNT8244A";
var x = new string(s.Where(c => (c >= '0' && c <= '9')).ToArray());