簡體   English   中英

從字符串中刪除字符的問題

[英]Issue with Removing characters from a string

我已經看到了許多有關如何使用c#編輯字符串中的字符的答案。

但是,我需要一個只考慮使用字符串類方法刪除的回復(也是為了避免使用stringbuilder)。

這只是為了讓我可以看到這個特定代碼的問題是什么,它似乎沒有擺脫電話號碼中的中間空白。 該代碼還刪除了不是數字的任何其他字符。

到目前為止,我一直無法理解為什么空白或兩個相鄰空白不會被刪除。 我懷疑也許對同一個字符串的自我分配可能是一個問題,但我不確定。

//leave only the digits
for (int i = 0; i < enteredPhone.Length; i++)
{
     switch (enteredPhone[i])
     {
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
           break;

        default:
             //gets rid of any other type of character
             enterPhone = enteredPhone.Remove(i, 1);
             break;
        }
   }

提前致謝。

刪除角色時,嘗試減1。 因為如果刪除位置5和i ++上的角色,i的值現在為5,則循環將找不到下一個角色。 像這樣:

default:
         //gets rid of any other type of character
         enterPhone = enteredPhone.Remove(i, 1);
         i--;
         break;

您的問題是每次都增加索引,即使您刪除了非數字字符也是如此。 在這種情況下,下一個字符將具有當前索引,但在下一個循環中,您將遞增當前索引,從而跳過下一個字符。 使用while代替for

int index = 0;
while(index < enteredPhone.Length)
{
    switch (enteredPhone[index])
    {
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            index++;
            break;

        default:                
            enteredPhone = enteredPhone.Remove(index, 1);
            break;
    }
}

您也可以使用Char.IsDigit簡化此循環:

int index = 0;
while(index < enteredPhone.Length)
{
    if (Char.IsDigit(enteredPhone[index]))
    {
        index++;
        continue;
    }

    enteredPhone = enteredPhone.Remove(index, 1);
}

忽略你奇怪的要求:

Regex.Replace(inputString, @"\D", string.Empty)
var onlyDigits = new string(enteredPhone.Where(Char.IsDigit).ToArray());

應該比正則表達更有效率。

“為什么空白或兩個相鄰的空格不會被刪除” -因為所有的字符索引后, i被減1,當你.Remove i

向后走繩 - 從Length-10

你也可以試試。 但我相信Linq或Regex解決方案是更好的選擇。

//leave only the digits
for (int i = enteredPhone.Length - 1; i >= 0; i--)
{
    if (!Char.IsDigit(enteredPhone[i]))
    {
       enterPhone = enteredPhone.Remove(i, 1);
    }
}

暫無
暫無

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

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