[英]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-1
到0
。
你也可以試試。 但我相信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.