代码之家  ›  专栏  ›  技术社区  ›  gyurisc

char 160在我的源代码中是什么意思?

  •  38
  • gyurisc  · 技术社区  · 15 年前

    我正在使用以下格式字符串“”将数字格式化为字符串,在某些情况下,我需要将这些数字字符串(如(1 234 567)转换为1234567。我想把空字符去掉,但发现了

    value = value.Replace(" ", "");  
    

    出于某种原因,字符串保持为1234567。在看了绳子之后,我发现了

    值[1]为160。

    我想知道160值是什么意思?

    8 回复  |  直到 9 年前
        1
  •  45
  •   Jon Skeet    15 年前

    答案是看进去 Unicode Code Charts -在哪里你可以找到 Latin-1 supplement chart ;这表明U+00A0(160根据标题,而不是167根据正文)是一个不间断的空格。

        2
  •  23
  •   Rubens Farias    15 年前

    也许您可以使用regex替换这些空字符:

    Regex.Replace(input, @"\p{Z}", "");
    

    这将删除 "any kind of whitespace or invisible separator" .

        3
  •  18
  •   YOU    15 年前

    字符码 160 将是  

        4
  •  12
  •   Imran Athar    12 年前

    value.Replace(Convert.ToChar(160).ToString(),"")

        5
  •  2
  •   Community c0D3l0g1c    7 年前

    这是一种快速(而且可读性很好)的方法,可以使用 Char.IsWhiteSpace :

    StringBuilder sb = new StringBuilder (value.Length);
    foreach (char c in value)
    {
        if (!char.IsWhiteSpace (c))
            sb.Append (c);
    }
    string value= sb.ToString();
    

    AS 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();
    
        6
  •  1
  •   Edward Olamisan    11 年前

    我建议使用 char overload version :

    value = value.Replace(Convert.ToChar(160), ' ') 
    
        7
  •  0
  •   Petr Voborník    10 年前

    扩展方法的解决方案:

    public static class ExtendedMethods
    {
        public static string NbspToSpaces(this string text)
        {
            return text.Replace(Convert.ToChar(160), ' ');
        }
    }
    

    它可以与此代码一起使用:

    value = value.NbspToSpaces();
    
        8
  •  0
  •   Boosa    9 年前

    不是用rubens已经发布的regex方法替换所有空字符的首选方法吗?

    Regex.Replace(input, @"\p{Z}", "");
    

    或者Expresso的建议:

    Regex.Replace(input, @"\p{Zs}", "");
    

    这里的区别是\p z替换任何类型的空白或不可见分隔符,而\p zs替换不可见的空白字符,但确实占用了空间。 您可以在此处阅读(Unicode类别部分):

    http://www.regular-expressions.info/unicode.html

    使用regex的优点是,只需要一个命令就可以替换正常的空格,而不仅仅是上面一些答案中解释的不间断空格。

    如果性能是前进的道路,那么当然应该考虑其他方法,但这超出了这里的范围。