簡體   English   中英

刪除空格:C#

[英]Removing White Space: C#

我正在嘗試remove white space String input中存在的remove white space 我的最終目標是創建一個中綴評估器,但是在解析輸入表達式時遇到了問題。

在我看來,對此的簡單解決方案是使用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}

似乎已從infix表達式中正確刪除了空格,但是將結果字符串拆分是不合適的。

誰能給我關於為什么的見解? 同樣,如果您有任何建設性的批評或建議,請告訴我!

如果匹配項位於字符串的一端,則在其旁邊會出現一個空的匹配項。 同樣,如果有兩個相鄰的匹配項,則字符串將在兩個匹配項上均分開,因此最終會在兩者之間出現一個空字符串。 引用MSDN

如果多個匹配項彼此相鄰,則將一個空字符串插入到數組中。 例如,在單個連字符上分割字符串會導致返回的數組在找到兩個相鄰連字符的位置包含一個空字符串。

如果在輸入字符串的開頭或結尾找到匹配項,則在返回數組的開頭或結尾包含一個空字符串。

只需在第二步中將它們過濾掉即可。

另外,請簡化生活並使用逐字字符串:

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

第二個表達式可以進一步簡化:

@"([()+*/-])"

請拋棄正則表達式。 有更好的工具可以使用。 您可以使用String.Trim() .TrimEnd().TrimStart()

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

對於字符串中的空格,請使用String.Replace

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

您將不得不將此擴展為其他空格字符。

var result = Regex.Split(input, "(\\d+|\\D)")
              .Where(x=>x!="").ToArray();

布特納先生的答案是正確的。 還請考慮您可以一步完成此操作。 MSDN

如果在Regex.Split表達式中使用了捕獲括號,則任何捕獲的文本都將包含在結果字符串數組中。

因此,如果將空白包含在拆分模式中但在捕獲括號之外,則可以對其進行拆分,但不將其包含在結果數組中:

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

結果:

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

您的最終結果將是:

substrings.Where(s => s != String.Empty)

為什么不刪除空格,然后使用常規的字符串處理功能拆分字符串呢? 像這樣...

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

為什么要使它變得比所需的復雜呢?

非正則表達式的解決方案可能是String.Replace-您只需將空字符串“”替換為“”,“ \\ t”和其他空格。

感謝您的所有答復,我找到了所需的解決方案。

// Ignore all whitespace within the expression.
infixExp = Regex.Replace(infixExp, @"\s+", String.Empty);

// Seperate the expression based on the tokens (, ), +, -, 
// *, /, and ignore any of the empty Strings that are added
// due to duplicates.
string[] substrings = Regex.Split(infixExp, @"([()+*/-])");
substrings = substrings.Where(s => s != String.Empty).ToArray();

通過執行此操作,可根據常規數學運算符(+,-,*,/)和括號將字符串的字符分成幾部分。 完成此操作后,將消除substrings所有剩余的空字符串

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM