C# - 通常的技术无法去除字符之间的空格问题

3

我遇到了一个看起来很难的问题。我正在使用HTMLAgilityPack读取一个HTML页面,并使用XPath选择我需要的一些元素。这个工作正常。

使用XPath,我还尝试选择这个DIV中的数字(441676)。

<div class="info">
       Money:
       441 676,-<br>        
</div>

我成功地选出了数字,并使用这种fantastic的方法去掉了它们中的空格: Fastest way to remove white spaces in string
但是无论我怎么做,441和676之间的空格都不会消失。 在其他位置修剪空格完全没有问题。只有在数字之间才不起作用。有人知道我错过了什么吗?

这个空格的字符代码是多少?创建间距不止一个字符,通常的空格是0x20。 - Philip Daubmeier
也许它不是“通常”的空白字符,有很多种 - Adam Houldsworth
1
为什么不在最后阶段尝试这个:("441 676").Replace(" ", ""); - Rumplin
@Rumplin 如果没有空格,否则链接的方法将起作用。 - Adam Houldsworth
1
@Rupal:例如,只需执行“yourstring.ToCharArray().Select(x=>(byte)x).ToArray()”即可从字符串中获取一个字节数组,并在调试器中查看它。如果它是一个普通的空格(十六进制:0x20),则在相应位置应该显示32(十六进制0x20的十进制值)。 - Philip Daubmeier
显示剩余4条评论
2个回答

3

看来你遇到了一个不间断空格。根据你链接的方法,我有两个建议。

第一个建议是更新你的toExclude数组,将以下字符添加进去:

var str = s.ExceptChars(new[] { ' ', '\t', '\n', '\r','\u00A0'});

注意:你应该将这个数组移到静态全局变量中,因为它从不改变,你不想每次调用此函数时重新分配它。

另一种选择是更新你的ExceptChars函数,使用Char.IsWhiteSpace函数,如下所示:

public static string ExceptChars(this string str, IEnumerable<char> toExclude) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < str.Length; i++) 
    { 
        char c = str[i]; 
        if (!Char.IsWhiteSpace(c))
            sb.Append(c); 
    } 
    return sb.ToString(); 
} 

我使用了您的解决方案。包括'u00A0'修复了问题,而无需像我一样创建新方法。谢谢! - Rupal

1
好的,我是这样解决的。使用最快的字符串去除空格方法中的ExceptChars方法,我将其修改为“AllowChars”方法,只保留给定的字符。就像这样:
public static string AllowedChars(string str, IEnumerable<char> toInclude)
{
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.Length; i++)
        {
            char c = str[i];
            if (toInclude.Contains(c))
                sb.Append(c);
        }
        return sb.ToString();
    }

那么就像这样使用这种方法:

string money_fixed =  AllowedChars(money, new HashSet<char>(new[] {'1','2', '3', '4', '5', '6', '7', '8', '9', '0' }));

金额可以包含小数点、逗号、连字符和货币符号。 - Adam Houldsworth
是的,一般来说你是正确的,但在这种情况下,数字始终以000 000 000的格式出现,所以我不需要考虑这个问题。 - Rupal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接