我使用以下格式字符串“##。##”将数字格式化为字符串,在某些时候我需要将这些数字字符串(如(1 234 567))转回1234567之类的字符串。我试图去除空的角色却找到了
value = value.Replace(" ", "");
由于某种原因,字符串保持1 234 567.看完字符串后我发现
值[1]为160.
我想知道160的含义是什么?
答案 0 :(得分:49)
答案是查看Unicode Code Charts - 您会在哪里找到Latin-1 supplement chart;这表明U + 00A0(根据你的头衔160,而不是身体的167)是一个不间断的空间。
答案 1 :(得分:24)
也许你可以使用正则表达式替换那些空字符:
Regex.Replace(input, @"\p{Z}", "");
答案 2 :(得分:18)
字符代码160
将为
答案 3 :(得分:12)
value.Replace(Convert.ToChar(160).ToString(),"")
答案 4 :(得分:2)
这是一种使用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();
答案 5 :(得分:2)
我建议使用char overload version:
value = value.Replace(Convert.ToChar(160), ' ')
答案 6 :(得分:0)
使用扩展方法的解决方案:
public static class ExtendedMethods
{
public static string NbspToSpaces(this string text)
{
return text.Replace(Convert.ToChar(160), ' ');
}
}
它可以与此代码一起使用:
value = value.NbspToSpaces();
答案 7 :(得分:0)
使用鲁本斯已经发布的正则表达式方法替换所有空字符(这是提问者想要做的)不是首选方法吗?
Regex.Replace(input, @"\p{Z}", "");
或Expresso建议:
Regex.Replace(input, @"\p{Zs}", "");
这里的区别在于\ p {Z}替换了任何类型的空格或不可见的分隔符,而\ p {Zs}替换了一个不可见的空格字符,但确实占用空间。 你可以在这里阅读(部分Unicode类别):
http://www.regular-expressions.info/unicode.html
使用RegEx的优点是,只需要一个命令来替换正常的空格,而不仅仅是非破坏空间,如上面的一些答案中所解释的那样。
如果表现是可行的,那么当然应该考虑其他方法,但这不在此范围内。