如何用String.Empty替换字符串中的隐藏(奇怪)字符

时间:2013-07-12 17:54:36

标签: c# asp.net replace trim

请查看以下代码:

Health = HttpUtility.HtmlDecode(Health).Replace("%", string.Empty).Replace("\"", string.Empty).Replace("‭‎",string.Empty).Trim();
File.WriteAllText(@"d:\a.txt", Health);
char[] ar = Health.ToCharArray();
File.WriteAllText(@"d:\a.txt", string.Empty);
foreach (char a in ar)
{
    File.AppendAllText(@"d:\a.txt", a.ToString() + Environment.NewLine);
}

int a = int.Parse(Health); //-> I Always Have Error In This Line

d:\a.txt的输出如下:



1
0
0



该文件中有6个隐藏和奇怪的字符,ar数组的长度为9 这些隐藏的角色是什么,我怎么能删除它们? 为什么Trim()无法删除隐藏的字符?

2 个答案:

答案 0 :(得分:3)

删除所有非printables:

var str = "kljdfssdflksdfkl\x03kdkddk\x04lkdldök";
var onlyPrintableChars = str.Where(ch => !char.IsControl(ch)).ToArray();
var resultStr = new string(onlyPrintableChars);

答案 1 :(得分:2)

即使删除了不可打印的字符,如果字符串中包含非数字字符,int.Parse也可能抛出异常。您可能想要使用int.TryParse

int a;
if (!int.TryParse(Health, out a))
{
    // error: non-numeric
}

从事物的外观来看,你试图删除所有不是数字的东西(否则你不会在结果上做int.Parse)。如果那是你想做的,那么你可以写:

Health = Regex.Replace(Health, "[^0-9]", "");

但这可能是一个坏主意,因为它会将"12foobar34"转变为"1234"

你可能应该弄清楚那些坏人物是什么以及他们如何进入你的数据。然后尽快从输入中删除它们。或者,更好的是,防止他们首先到达那里。