Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对于特定文本或字符的多次替换,合适的设计模式是什么_C#_Design Patterns_C# 4.0 - Fatal编程技术网

C# 对于特定文本或字符的多次替换,合适的设计模式是什么

C# 对于特定文本或字符的多次替换,合适的设计模式是什么,c#,design-patterns,c#-4.0,C#,Design Patterns,C# 4.0,我需要替换数字、html标记和特殊字符。我为每个目的创建了一个方法。例如,我为ReplaceSpecialCharacters、replaceThMLTAGS和ReplaceNumeric创建了方法。请注意,还有一些额外的替换方法正在出现。我的问题是什么是合适的设计模式?我正在考虑使用策略或工厂模式来解决这个问题,Decorator模式是否适用于这个需求 sample code var text="12233333333<body>CLEANTEXT!@#$%^&*()<

我需要替换数字、html标记和特殊字符。我为每个目的创建了一个方法。例如,我为ReplaceSpecialCharacters、replaceThMLTAGS和ReplaceNumeric创建了方法。请注意,还有一些额外的替换方法正在出现。我的问题是什么是合适的设计模式?我正在考虑使用策略或工厂模式来解决这个问题,Decorator模式是否适用于这个需求

sample code
var text="12233333333<body>CLEANTEXT!@#$%^&*()</body>"
var cleanText= ReplaceHTMLTags(text)
    cleanText= ReplaceNumeric(cleaText)
    cleanText= ReplaceSpecialCharacters(cleaText)
示例代码
var text=“12233333333CLEANTEXT!@$%^&*()”
var cleanText=replaceThMLTAGS(文本)
cleanText=ReplaceNumeric(cleanText)
cleanText=替换特殊字符(cleanText)

这似乎是一个很好的策略模式使用。 这将帮助您在运行时选择算法,如HTMLReplacementBehavior、NumericReplacementBehavior

或者,这也可以通过利用Builder来实现,您可以像

var replacementPlan = new ReplacementBuilder(ReplaceHTMLTags ).Add(ReplaceSpecialCharacters).Add(ReplaceNumeric);

稍后执行replace方法,该方法迭代调用各种replace逻辑。

我的建议是为每个replace创建一个字符串扩展方法

public static class MyStringExtension
{
    public static string ReplaceHTMLTags(this string text)
    {
        return Regex.Replace(text, "<.*?>", String.Empty);
    }
}

您可以创建自己的管道或将调用组织为fluent api,但这是基于性能的观点,迭代和分配
string
3次代价很高,一次迭代也可以完成。e、 g.
Replace(字符串输入,bool htmlTag,bool numeric,bool specialChar)
这将是一个非常复杂的小而简单的任务,可以用正则表达式来完成。@AndréSanson,是的,你的正确答案是肯定的,但是即将出现的Replace方法比前面提到的3个例子复杂得多。谢谢。同时考虑管道模式。如果这个答案有帮助,请删除否决票。谢谢
text.ReplaceHTMLTags().ReplaceNumeric().ReplaceSpecialCharacters()