char 160在我的源代码中意味着什么?
我格式化数字string使用以下格式string“##。##”,在某些时候,我需要把这些数字string(1 234 567)转回像1234567.我试图去掉空字符但是发现
value = value.Replace(" ", "");
由于某种原因,string保持1 234 567.看了string后,我发现
值[1]是160。
我想知道160是什么意思?
答案是查看Unicode代码图表 – 在哪里可以findLatin-1补充图表 ; 这表明,U + 00A0(160是根据你的头衔,而不是按照身体167)是一个不破的空间。
也许你可以使用正则expression式来replace那些空的字符:
Regex.Replace(input, @"\p{Z}", "");
这将删除“任何types的空白或不可见的分隔符” 。
char代码160
将是
value.Replace(Convert.ToChar(160).ToString(),"")
这是使用Char.IsWhiteSpace
删除任何分类为空白字符的快速(且相当可读)的方法:
StringBuilder sb = new StringBuilder (value.Length); foreach (char c in value) { if (!char.IsWhiteSpace (c)) sb.Append (c); } string value= sb.ToString();
正如dbemerlin所指出的,如果你知道你只需要你的数据中的数字,那么你最好使用Char.IsNumber
或者更具限制性的Char.IsDigit
:
StringBuilder sb = new StringBuilder (value.Length); foreach (char c in value) { if (char.IsNumber(c)) sb.Append (c); } string value= sb.ToString();
如果你需要数字和小数分隔符,这样的事情应该足够了:
StringBuilder sb = new StringBuilder (value.Length); foreach (char c in value) { if (char.IsNumber(c)|c == System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator ) sb.Append (c); } string value= sb.ToString();
我会build议使用char重载版本 :
value = value.Replace(Convert.ToChar(160), ' ')
解决scheme扩展方法:
public static class ExtendedMethods { public static string NbspToSpaces(this string text) { return text.Replace(Convert.ToChar(160), ' '); } }
它可以用于这个代码:
value = value.NbspToSpaces();
用鲁本斯已经发布的正则expression式方法replace所有空字符(这是提问者想要做的)不是首选的方法吗?
Regex.Replace(input, @"\p{Z}", "");
或者Expressobuild议:
Regex.Replace(input, @"\p{Zs}", "");
这里的区别是\ p {Z}replace了任何一种空格或不可见的分隔符,而\ p {Zs}replace了一个不可见的空白字符,但占用了空间。 你可以在这里阅读(Section Unicode Categories):
http://www.regular-expressions.info/unicode.html
使用正则expression式的优点是,只需要一个命令来replace正常的空格,而不是像上面的一些答案中所解释的那样,不断的空格。
如果performance是顺其自然的方式,那么当然也应该考虑其他的方法,但是这里没有范围。