如何从字符串中删除多个有问题的字符?

这是我的工作代码:

string Input; string Output; Input = data; Output = Input.Replace(@")", ""); 

在这里,我只是从我的字符串中删除括号“)”,如果它存在的话。 现在我如何扩展像“)”这样的违规字符列表,以包括“(”和“ – ”?

我意识到我可以写两个类似于输出的语句,但我想知道是否有更好的方法……

如果你只是做了几次替换(我看到你只做了三次),最简单的方法就是将三个Replace调用链接到一个语句中而不用担心Regex或StringBuilders:

 Output = Input.Replace("(", "").Replace(")", "").Replace("-", ""); 

…这比每次将结果存储在输出中要好一些。

LINQ解决方案:

 Output = new String(Input.Except("()-").ToArray()); 
 Output = Regex.Replace(Input, "[()-]", ""); 

表达式中的[]字符创建一个字符类。 它与这些字符不直接匹配。

作为Regex的替代方案,可以更容易地将其作为替换集合进行管理并使用StringBuilder进行替换。

 var replacements = new[] { ")", "-" }; var output = new StringBuilder(Input); foreach (var r in replacements) output.Replace(r, string.Empty); 

您可以使用此处记录的Regex.Replace()

您可以使用包含坏词的列表。 现在只需使用foreach循环迭代它并替换每个错误的字符串。

 StringBuilder output = new StringBuilder("(Hello) W,or;ld"); List badwords = new List(); badwords.Add("("); badwords.Add(")"); badwords.Add(","); badwords.Add("."); badwords.Add(";"); badwords.ForEach(bad => output = output.Replace(bad, String.Empty)); //Result "Hello World" 

亲切的问候。

//编辑:实施Khan建议的更改。

这也可以让你做同样的事情

  private static string ReplaceBadWords(string[] BadStrings, string input) { StringBuilder sb = new StringBuilder(input); BadStrings.ToList().ForEach(b => { if(b != "") { sb = sb.Replace(b, string.Empty); } }); return sb.ToString(); } 

样本用法是

  string[] BadStrings = new string[] { ")", "(", "random", "" }; string input = "Some random text()"; string output = ReplaceBadWords(BadStrings, input); 

我可能会使用正则表达式,因为它简洁而重要。 如果您害怕正则表达式,您可以教电脑为您编写。 这是一个用于清理字符串的简单类:您只需提供一个无效字符列表:

 class StringCleaner { private Regex regex ; public StringCleaner( string invalidChars ) : this ( (IEnumerable) invalidChars ) { return ; } public StringCleaner ( params char[] invalidChars ) : this( (IEnumerable) invalidChars ) { return ; } public StringCleaner( IEnumerable invalidChars ) { const string HEX = "0123456789ABCDEF" ; SortedSet charSet = new SortedSet( invalidChars ) ; StringBuilder sb = new StringBuilder( 2 + 6*charset.Count ) ; sb.Append('[') ; foreach ( ushort c in charSet ) { sb.Append(@"\u" ) .Append( HEX[ ( c >> 12 ) & 0x000F ] ) .Append( HEX[ ( c >> 8 ) & 0x000F ] ) .Append( HEX[ ( c >> 4 ) & 0x000F ] ) .Append( HEX[ ( c >> 0 ) & 0x000F ] ) ; } sb.Append(']') ; this.regex = new Regex( sb.ToString() ) ; } public string Clean( string s ) { if ( string.IsNullOrEmpty(s) ) return s ; string value = this.regex.Replace(s,"") ; return value ; } } 

一旦你拥有了它,很容易:

 static void Main(string[] args) { StringCleaner cleaner = new StringCleaner( "aeiou" ) ; string dirty = "The quick brown fox jumped over the lazy dog." ; string clean = cleaner.Clean(dirty) ; Console.WriteLine( clean ) ; return; } 

最后cleanTh qck brwn fx jmpd vr th lzy dg.

简单!