【问题标题】:C# how to compress large string? [duplicate]C#如何压缩大字符串? [复制]
【发布时间】:2020-02-21 22:43:43
【问题描述】:

我收到了来自 Html Agility Pack 的字符串 - 已清理且没有标签:

string cleanText = htmlDoc.DocumentNode.InnerText;

现在我的问题是如何清除所有字符,如空格、换行符等? 示例字符串:

                                                                                    @Vanni
                                            breitbart.com

                                            #swiat
                                            #usa
                                            #youtube
                                            #technologia
                                            +2 inne






                                    Akcja "They can't silence us" ma związek z pozwem wytoczonym przeciwko YouTube przez kanał PragerU za bezpodstawne zablokowanie konta.

我需要这样的字符串:

@Vannibreitbart.com#swiat#usa#youtube#technologia+2inneAkcja“他们不能沉默”mazwiązekzpozwemwytoczonymprzeciwkoYouTubeprzezkanałPragerUzabezpodstawnezablokowaniekonta。

【问题讨论】:

    标签: c# visual-studio html-agility-pack


    【解决方案1】:

    Regex 可能和其他任何方法一样简单:

    string compressed = Regex.Replace(bigstring, @"\s+", "");
    

    你也可以将它作为一个 chararray 进行迭代,并且只将 Char.IsWhitespace() 返回 false 的那些字符加载到一个字符串构建器中

    【讨论】:

    • 使用@"\s+" 让它变得贪婪。此外,由于您的解决方案有上千个步骤,因此只涉及几百个步骤;非常低效。
    • 同样使用当前字符串,您的方法将匹配超过 400 次,而 @"\s+" 将仅匹配 20 次,这是一个重大变化;更少的步骤 == 更少的匹配和更好的性能。
    【解决方案2】:

    使用它来删除字符,将字符放在数组上以删除。将字符串传递给方法。这是一个静态方法

      public static string RemoveCharSpecials(string document)
        {
            var charsToRemove = new string[] { "@", ",", ".", ";", "'", "(", ")", "-", " ", "/" };
    
            try
            {
                if (!string.IsNullOrEmpty(document))
                {
                    foreach (var c in charsToRemove)
                        document = document.Replace(c, string.Empty);
                }
    
                return document;
            }
            catch
            {
                return "";
            }
        }
    

    【讨论】:

    • 捕获所有异常,忽略它们,然后返回一个空字符串,这几乎是您可以在这里做的最糟糕的事情。我希望您实际上不会编写执行此类操作的生产代码...
    • 更不用说您正在替换 OP 想要保留的字符。当他们似乎只是想删除空格/换行符时,为什么要有一个黑名单?
    • @BrootsWaymb,在这种情况下,这种尝试永远不会发生
    • @CelzioBR - 并不意味着这不是糟糕的编码实践。但是,是的,它甚至不应该在这里。
    • @CelzioBR - 因为它既没有任何用途,又是糟糕的异常处理实践。仅仅因为它在这种情况下不会引起问题并不意味着它是好的。它不能“很好地工作”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 2011-04-08
    相关资源
    最近更新 更多