What does char 160 mean in my source code?

前端 未结 8 1053
温柔的废话
温柔的废话 2021-02-05 00:01

I am formatting numbers to string using the following format string \"# #.##\", at some point I need to turn back these number strings like (1 234 567) into something like 1234

相关标签:
8条回答
  • 2021-02-05 00:20

    Maybe you could to use a regex to replace those empty chars:

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

    This will remove "any kind of whitespace or invisible separator".

    0 讨论(0)
  • 2021-02-05 00:20

    Solution with extended methods:

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

    And it can be used with this code:

    value = value.NbspToSpaces();
    
    0 讨论(0)
  • 2021-02-05 00:25

    char code 160 would be  

    0 讨论(0)
  • 2021-02-05 00:27

    Wouldn't be the preferred method to replace all empty characters (and this is what the questioner wanted to do) with the Regex Method which Rubens already posted?

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

    or what Expresso suggests:

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

    The difference here is that \p{Z} replaces any kind of whitespace or invisible separator whereas the \p{Zs} replaces a whitespace character that is invisible, but does take up space. You can read it here (Section Unicode Categories):

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

    Using RegEx has the advantage that only one command is needed to replace also the normal whitespaces and not only the non-breaking space like explained in some answers above.

    If performance is the way to go then of course other methods should be considered but this is out of scope here.

    0 讨论(0)
  • 2021-02-05 00:29

    The answer is to look in Unicode Code Charts - where you'll find the Latin-1 supplement chart; this shows that U+00A0 (160 as per your title, not 167 as per the body) is a non-breaking space.

    0 讨论(0)
  • 2021-02-05 00:29

    This is a fast (and fairly readable) way of removing any characters classified as white space using 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 points out, if you know you will only need numbers from your data, you would be better use Char.IsNumber or the even more restrictive Char.IsDigit:

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

    If you need numbers and decimal seperators, something like this should suffice:

    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();
    
    0 讨论(0)
提交回复
热议问题