请查看以下代码:
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()
无法删除隐藏的字符?
答案 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"
。
你可能应该弄清楚那些坏人物是什么以及他们如何进入你的数据。然后尽快从输入中删除它们。或者,更好的是,防止他们首先到达那里。