簡體   English   中英

如何在沒有正則表達式或任何外部方法的情況下擺脫雙空格?

[英]How do I get rid of double spaces without regex or any external methods?

這是我們大學課程給我們的額外練習,我們需要找出一個句子是否包含回文。 雖然判斷一個詞是否為回文相當容易,但可能存在給定句子如下所示的情況:“Dog cat - kajak house”。 我的邏輯是,使用我已經寫過的函數,首先確定一個字符是否是一個字母,如果不是就刪除它。 然后計算空格數 + 1 以找出句子中有多少個單詞,准備這些單詞的數組,然后投射 function 檢查數組的每個元素上的單詞是否為回文。 然而,雙倍空間會在“計數”階段搞砸一切。 我花了大約一個小時來擺弄代碼來執行此操作,但是我無法解決這個問題。 誰能幫幫我? 請注意,我不應該使用任何外部方法或庫。 我已經使用 RegEx 完成了這項工作並且相當容易,但是我想“合法”地執行此操作。 提前致謝!

只是在空間上分裂,訣竅是去除空的。 谷歌StringSplitOptions.RemoveEmptyEntries

然后顯然加入一個干凈的空間

您可以將您感興趣的所有字符復制到一個新字符串中:

var copy = new StringBuilder();

// Indicates whether the previous character was whitespace
var whitespace = true;

foreach (var character in originalString)
{
    if (char.IsLetter(character))
    {
        copy.Append(character);
        whitespace = false;
    }
    else if (char.IsWhiteSpace(character) && !whitespace)
    {
        copy.Append(character);
        whitespace = true;
    }
    else
    {
        // Ignore other characters
    }
}

如果您正在尋找最基本的/olde-worlde 選項,這將起作用。 但是除了說明性的方式之外,沒有人會真正這樣做。

string test = "Dog cat       kajak house"; // Your string minus any non-letters
int prevLen;
do
{
    prevLen = test.Length;
    test = test.Replace("  ", " "); // Repeat-replace double spaces until none left
} while (prevLen > test.Length);

就個人而言,我可能會執行以下操作以得到一組要檢查的單詞:

string[] words = test.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

暫無
暫無

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

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