6

这是我的工作代码:

string Input;
string Output;

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

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

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

4

8 回答 8

11

LINQ解决方案:

Output = new String(Input.Except("()-").ToArray());
于 2013-10-09T19:27:54.950 回答
11

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

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

...这比每次都将结果存储在输出中要好一点。

于 2013-10-09T19:38:00.683 回答
10
Output = Regex.Replace(Input, "[()-]", "");

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

于 2013-10-09T19:17:20.687 回答
4

作为 的替代方案Regex,将其作为替换集合进行管理并使用StringBuilder.

var replacements = new[] { ")", "-" };
var output = new StringBuilder(Input);
foreach (var r in replacements)
    output.Replace(r, string.Empty);
于 2013-10-09T19:19:03.213 回答
3

你可以使用Regex.Replace(),记录在这里

于 2013-10-09T19:11:50.553 回答
1

这也将允许您做同样的事情

    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);
于 2013-10-09T20:17:44.343 回答
1

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

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

亲切的问候。

//编辑:实施了可汗建议的更改。

于 2013-10-09T19:22:50.263 回答
0

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

class StringCleaner
{
  private Regex regex ;

  public StringCleaner( string invalidChars ) : this ( (IEnumerable<char>) invalidChars )
  {
    return ;
  }
  public StringCleaner ( params char[] invalidChars ) : this( (IEnumerable<char>) invalidChars )
  {
    return ;
  }
  public StringCleaner( IEnumerable<char> invalidChars )
  {
    const string    HEX     = "0123456789ABCDEF" ;
    SortedSet<char> charSet = new SortedSet<char>( 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.

简单的!

于 2013-10-10T00:55:51.790 回答