首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >清理绳子吗?有没有更好的方法呢?

清理绳子吗?有没有更好的方法呢?
EN

Stack Overflow用户
提问于 2012-07-09 21:12:55
回答 8查看 34.8K关注 0票数 27

我使用这个方法来清理字符串。

代码语言:javascript
复制
public static string CleanString(string dirtyString)
{
    string removeChars = " ?&^$#@!()+-,:;<>’\'-_*";
    string result = dirtyString;

    foreach (char c in removeChars)
    {
        result = result.Replace(c.ToString(), string.Empty);
    }

    return result;
}

这个方法运行良好..但是在这个方法中有一个性能问题。每次我传递字符串,每个字符都会进入循环,如果我有一个很大的字符串,那么返回对象就会花费太多的时间。

有没有其他更好的方法来做同样的事情?就像在LINQ或JQUERY / Javascript中

任何建议都将不胜感激。

EN

回答 8

Stack Overflow用户

发布于 2012-07-09 21:29:47

如果你追求的是纯粹的速度和效率,我建议你这样做:

代码语言:javascript
复制
public static string CleanString(string dirtyString)
{
    HashSet<char> removeChars = new HashSet<char>(" ?&^$#@!()+-,:;<>’\'-_*");
    StringBuilder result = new StringBuilder(dirtyString.Length);
    foreach (char c in dirtyString)
        if (!removeChars.Contains(c)) // prevent dirty chars
            result.Append(c);
    return result.ToString();
}

RegEx当然是一个优雅的解决方案,但它增加了额外的开销。通过指定字符串构建器的起始长度,它只需要分配一次内存(并为末尾的ToString分配第二次内存)。这将减少内存使用并提高速度,特别是在较长的字符串上。

然而,正如L.B.所说,如果您正在使用它来正确地编码绑定到HTML输出的文本,那么您应该使用HttpUtility.HtmlEncode而不是自己来做它。

票数 7
EN

Stack Overflow用户

发布于 2012-07-09 21:16:18

使用正则表达式[?&^$#@!()+-,:;<>’\'-_*]替换为空字符串

票数 4
EN

Stack Overflow用户

发布于 2012-07-09 21:30:02

我不知道在性能方面,使用Regex或LINQ是否会有所改善。

可能有用的是,使用StringBuilder而不是每次都使用string.Replace来创建新字符串:

代码语言:javascript
复制
using System.Linq;
using System.Text;

static class Program {
    static void Main(string[] args) {
        const string removeChars = " ?&^$#@!()+-,:;<>’\'-_*";
        string result = "x&y(z)";
        // specify capacity of StringBuilder to avoid resizing
        StringBuilder sb = new StringBuilder(result.Length);
        foreach (char x in result.Where(c => !removeChars.Contains(c))) {
            sb.Append(x);
        }
        result = sb.ToString();
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11395775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档