我正在格式化數字以字符串使用以下格式字符串「##。##」,在某些時候我需要將這些數字字符串(1 234 567)變成類似1234567的東西。我試圖刪除空字符卻發現char 160在我的源代碼中意味着什麼?
value = value.Replace(" ", "");
出於某種原因,並串保持1 234 567望着我發現,[1]
值爲160
我想知道後面的字符串是什麼值160的意思是?
我正在格式化數字以字符串使用以下格式字符串「##。##」,在某些時候我需要將這些數字字符串(1 234 567)變成類似1234567的東西。我試圖刪除空字符卻發現char 160在我的源代碼中意味着什麼?
value = value.Replace(" ", "");
出於某種原因,並串保持1 234 567望着我發現,[1]
值爲160
我想知道後面的字符串是什麼值160的意思是?
答案是在Unicode Code Charts - 你會發現Latin-1 supplement chart;這表明U + 00A0(根據你的頭銜而定,不是身體的167)是一個非破壞性的空間。
字符代碼160
將
也許你可以使用正則表達式來代替那些空字符:
Regex.Replace(input, @"\p{Z}", "");
這是使用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();
value.Replace(Convert.ToChar(160).ToString(),"")
value.Replace(((char)160).ToString(),「」)用於較少的輸入 – cryss 2014-06-12 19:27:22
我會建議使用char overload version:
value = value.Replace(Convert.ToChar(160), ' ')
解決方案具有擴展的方法:
public static class ExtendedMethods
{
public static string NbspToSpaces(this string text)
{
return text.Replace(Convert.ToChar(160), ' ');
}
}
,它可以與此代碼中使用:
value = value.NbspToSpaces();
用魯本斯已經發布的正則表達式方法替換所有空字符(這是提問者想要做的)不是首選方法嗎?
Regex.Replace(input, @"\p{Z}", "");
還是什麼快報提示:
Regex.Replace(input, @"\p{Zs}", "");
這裏的區別在於,\ p {Z}替換任何空格或無形的隔膜,而\ p {ZS}代替空格字符,也就是看不見,但確實佔據了空間。 你可以在這裏閱讀(科統一分類):
http://www.regular-expressions.info/unicode.html
使用正則表達式有隻需要一個命令也替換正常的空格和一些不僅不間斷空格像解釋的好處上面的答案。
如果性能是去那當然其他方法應考慮的方式,但這種超出範圍在這裏。
有內置到Windows發現這些類型的Unicode代碼點的一個不錯的小程序。使用CHARMAP.EXE – 2010-01-25 14:06:19
我試圖運行它,但我不能在Windows 2008 – gyurisc 2010-01-25 15:30:16
@HansPassant你表示,2010年小程序? – asyncwait 2015-04-15 16:57:43