我有一个包含常规字符,特殊字符和数字的字符串。我试图删除常规字符,只保留数字和特殊字符。我使用循环来检查字符是特殊字符还是数字。然后,我用空字符串替换它。但是,这似乎不起作用,因为我收到错误"无法应用!=字符串或字符#34;。我的代码如下。如果可能的话,请给我一些想法来解决这个问题。感谢。
public string convert_string_to_no(string val)
{
string str_val = "";
int val_len = val.Length;
for (int i = 0; i < val_len; i++)
{
char myChar = Convert.ToChar(val.Substring(i, 1));
if ((char.IsDigit(myChar) == false) && (myChar != "-"))
{
str_val = str_val.replace(str_val.substring(i,1),"");
}
}
return str_val;
}
答案 0 :(得分:5)
你可以使用正则表达式来做到这一点。比使用循环和清理
更快 String test ="Q1W2-hjkxas1-EE3R4-5T";
Regex rgx = new Regex("[^0-9-]");
Console.WriteLine(rgx.Replace(test, ""));
检查工作代码here
答案 1 :(得分:3)
似乎尝试将“ - ”更改为“ - ”,最好构造字符串而不是替换字符。
public string convert_string_to_no(string val)
{
string str_val = "";
int val_len = val.Length;
for (int i = 0; i < val_len; i++)
{
char myChar = Convert.ToChar(val.Substring(i, 1));
if (char.IsDigit(myChar) && myChar == '-')
{
str_val += myChar;
}
}
return str_val;
}
答案 2 :(得分:2)
我更喜欢Linq:
public static class StringExtensions
{
public static string ToLimitedString(this string instance,
string validCharacters)
{
// null reference checking...
var result = new string(instance
.Where(c => validCharacters.Contains(c))
.ToArray());
return result;
}
}
用法:
var test ="Q1W2-hjkxas1-EE3R4-5T";
var limited = test.ToLimitedString("01234567890-");
Console.WriteLine(limited);
结果:
12-1-34-5