0

remove white spaceに存在することを試みていますString input。私の最終的な目標は、中置評価器を作成することですが、入力式の解析に問題があります。

これに対する簡単な解決策は、Regular Expression関数を使用することだと私には思えます。Regex.Replace(...)

これが私がこれまでに持っているものです..

infixExp = Regex.Replace(infixExp, "\\s+", string.Empty);
string[] substrings = Regex.Split(infixExp, "(\\()|(\\))|(-)|(\\+)|(\\*)|(/)");

ユーザーが中置式 (2 + 3) * 4 を入力すると仮定すると、これにより文字列が配列に分割されることが予想され{(, 2, +, 3, ), *, 4}ます。ただし、デバッグ後、次の出力が得られます。

infixExp = "(2+3)*7"
substrings = {"", (, 2, +, 3, ), "", *, 7}

中置式から空白が適切に削除されているように見えますが、結果の文字列の分割は不適切です。

誰かが理由について私に洞察を与えることができますか? 同様に、建設的な批判や提案があれば、お知らせください。

4

7 に答える 7

1

正規表現を捨ててください。使用するより良いツールがあります。String.Trim().TrimEnd()、およびを使用できます.TrimStart()

string inputString = "   asdf    ";
string output = inputString.Trim();

文字列内の空白には、String.Replace.

string output2 = output.Replace(" ", "");

これを他の空白文字に拡張する必要があります。

于 2013-08-28T17:17:37.703 に答える
1
var result = Regex.Split(input, "(\\d+|\\D)")
              .Where(x=>x!="").ToArray();
于 2013-08-28T17:19:43.950 に答える
1

m.buettner の答えは正しいです。また、これを 1 つのステップで実行できることも考慮してください。MSDNから:

Regex.Split 式でキャプチャ用の括弧が使用されている場合、キャプチャされたテキストは結果の文字列配列に含まれます。

したがって、分割パターンに空白を含め、キャプチャ用の括弧の外側に空白を含めると、同様に分割できますが、結果の配列には含めません。

var substrings = Regex.Split("(2 + 3) * 7", @"([()+*/-])|\s+");

結果:

substrings = {"", ( , 2, "", +, "", 3, ), "", "", *, "", 7}

最終結果は次のようになります。

substrings.Where(s => s != String.Empty)
于 2013-08-28T17:49:36.733 に答える
0

空白を削除してから、通常の文字列処理関数で文字列を分割してみませんか? このような...

string x = "(2 + 3) * 4";
x = x.Replace(" ", "").Replace("\t",""); //etc...
char[] y = x.ToCharArray();

これを必要以上に複雑にする必要はありません。

于 2013-08-28T17:17:59.183 に答える
0

正規表現以外のソリューションは、おそらくString.Replaceです。単に " "、"\t"、およびその他の空白を空の文字列 "" に置き換えることができます。

于 2013-08-28T17:18:08.020 に答える