0

次のような文字の配列を指定する最良の方法は何だろうと思っています。

{
}
[
]

次に、これらの文字列をチェックし、存在する場合は完全に削除します。

        if (compiler.Parser.GetErrors().Count == 0)
        {
            AstNode root = compiler.Parse(phrase.ToLower());
            if (compiler.Parser.GetErrors().Count == 0)
            {
                try
                {
                    fTextSearch = SearchGrammar.ConvertQuery(root, SearchGrammar.TermType.Inflectional);
                }
                catch
                {
                    fTextSearch = phrase;
                }
            }
            else
            {
                fTextSearch = phrase;
            }
        }
        else
        {
            fTextSearch = phrase;
        }

        string[] brackets = brackets = new string[]
        {
            "{",
            "}",
            "[",
            "]"
        };

        string[] errorChars = errorChars = new string[]
        {
            "'",
            "&"
        };

        StringBuilder sb = new StringBuilder();

        string[] splitString = fTextSearch.Split(errorChars, StringSplitOptions.None);

        int numNewCharactersAdded = 0;
        foreach (string itm in splitString)
        {
            sb.Append(itm); //append string
            if (fTextSearch.Length > (sb.Length - numNewCharactersAdded))
            {
                sb.Append(fTextSearch[sb.Length - numNewCharactersAdded]); //append splitting character
                sb.Append(fTextSearch[sb.Length - numNewCharactersAdded - 1]); //append it again
                numNewCharactersAdded++;
            }
        }

        string newString = sb.ToString();
4

8 に答える 8

11

正規表現はこれをはるかに簡単に行うことができます。

var result = Regex.Replace(input, @"[[\]()]", "");

文字セット([...])を使用して、その中の任意の文字と一致させ、何も置き換えないようにします。Regex.Replaceすべての一致を置き換えます。

于 2012-07-25T15:25:53.137 に答える
5

もう 1 つの簡潔な方法はEnumerable.Except、Chars のセットの差を取得するために使用することです ( bracketschars であると仮定します)。

String newString = new String(oldString.Except(brackets).ToArray());
于 2012-07-25T15:29:20.423 に答える
2
string str = "faslkjnro(fjrmn){ferqwe}{{";
char[] separators = new []{'[', ']','{','}' };
var sb = new StringBuilder();
foreach (var c in str)
{
    if (!separators.Contains(c))
    {
        sb.Append(c);
    }
}

return sb.ToString();
于 2012-07-25T15:31:25.297 に答える
0

これはどう:

string myString = "a12{drr[ferr]vgb}rtg";
myString = myString.Replace("[", "").Replace("{", "").Replace("]", "").Replace("}", "");

最終的には:

a12drrferrvgbrtg

于 2012-07-25T15:25:45.957 に答える
0

私があなたの問題を理解しているかどうかはわかりませんが、これであなたの問題を解決することができます:

string toRemove = "{}[]";
string result = your_string_to_be_searched;
foreach(char c in toRemove)
    result = result.Replace(c.ToString(), "");

または拡張メソッドを使用

static class Extensions
{
    public static string RemoveAll(this string src, string chars)
    {
        foreach(char c in chars)
            src= src.Replace(c.ToString(), "");
        return src;
    }
}

これであなたは使うことができますstring result = your_string_to_be_searched.RemoveAll("{}[]");

于 2012-07-25T15:27:05.920 に答える
0
string charsToRemove = @"[]{}";
string pattern = string.Format("[{0}]", Regex.Escape(charsToRemove));
var result = Regex.Replace(input, pattern, "");

他の同様の回答のいくつかに対するこれの主な利点は、正規表現でエスケープする必要がある文字を決定することに煩わされないことです。図書館に任せることができます。

于 2012-07-25T15:32:54.520 に答える
0

これは、次のように非常にコンパクトな方法で行うことができます。

string s = "ab{c[d]}";
char[] ca = new char[] {'{', '}', '[', ']'};
Array.ForEach(ca, e => s = s.Replace(e.ToString(), ""));

またはこれ:

StringBuilder s = new StringBuilder("ab{c[d]}");
char[] ca = new char[] {'{', '}', '[', ']'};
Array.ForEach(ca, e => s.Replace(e.ToString(), ""));
于 2012-07-25T15:39:22.500 に答える