У мене є такий рядок:
string val = "123-12-1234";
Як я можу замінити тире, використовуючи порожній рядок у C #.
я маю на увазі val.Replace(char oldChar, newChar);
Що потрібно зайти oldCharі newChar.
У мене є такий рядок:
string val = "123-12-1234";
Як я можу замінити тире, використовуючи порожній рядок у C #.
я маю на увазі val.Replace(char oldChar, newChar);
Що потрібно зайти oldCharі newChar.
Відповіді:
Ви можете використовувати різне перевантаження, Replace()яке займає рядок.
val = val.Replace("-", string.Empty)
Оскільки інші відповіді тут, хоч і правильні, явно не стосуються ваших початкових сумнівів, я зроблю це.
Якщо ви зателефонуєте, string.Replace(char oldChar, char newChar)це замінить входження символу на інший символ. Це індивідуальна заміна. Через це довжина отриманого рядка буде однаковою.
Ви хочете видалити тире, що, очевидно, не те саме, що замінити їх іншим символом. Ви не можете замінити його "без символу", оскільки 1 символ завжди є 1 символом. Ось чому вам потрібно використовувати перевантаження, яке приймає рядки: рядки можуть мати різну довжину. Якщо ви заміните рядок довжиною 1 на рядок довжиною 0, це призведе до того, що дефіси зникнуть, замінивши їх на "нічого".
Це здається занадто простим, але:
val.Replace("-","");
val.Replace("-", "");
string val = "123-12-1234";
val = val.Replace("-", ""); // result: 123121234
Якщо ви хочете замінити символ у рядку порожнім символом, це означає, що ви хочете видалити цей символ із рядка, прочитайте відповідь Р. Мартіньо Фернандеса.
Ось приклад того, як видалити символ із рядка (замінити на "Порожній символ"):
public static string RemoveCharFromString(string input, char charItem)
{
int indexOfChar = input.IndexOf(charItem);
if (indexOfChar >= 0)
{
input = input.Remove(indexOfChar, 1);
}
return input;
}
або ця версія, яка видаляє всі повторення символу в рядку:
public static string RemoveCharFromString(string input, char charItem)
{
int indexOfChar = input.IndexOf(charItem);
if (indexOfChar < 0)
{
return input;
}
return RemoveCharFromString(input.Remove(indexOfChar, 1), charItem);
}
Якщо ви в циклі, скажімо, ви прокручуєте список розділових знаків, які ви хочете видалити, ви можете зробити щось подібне:
private const string PunctuationChars = ".,!?$";
foreach (var word in words)
{
var word_modified = word;
var modified = false;
foreach (var punctuationChar in PunctuationChars)
{
if (word.IndexOf(punctuationChar) > 0)
{
modified = true;
word_modified = word_modified.Replace("" + punctuationChar, "");
}
}
//////////MORE CODE
}
Фокус полягає в наступному:
word_modified.Replace("" + punctuationChar, "");
У мене є латинська версія коду Развана Думітру, тому що ми використовуємо навіть показник мільйона. Поза курсом я використовую подвійну заміну: D
public static string CleanNumb(string numb)
{
foreach (char c in ".,'´")
numb = numb.Replace(c, ' ');
return numb.Replace(" ", "");
}
Мене завжди турбувало те, що я не можу використовувати String.Removeметод для позбавлення від екземплярів рядка або символу в рядку, тому я зазвичай додаю методи розширення тез до своєї основи коду:
public static class StringExtensions
{
public static string Remove(this string str, string toBeRemoved)
{
return str.Replace(toBeRemoved, "");
}
public static string RemoveChar(this string str, char toBeRemoved)
{
return str.Replace(toBeRemoved.ToString(), "");
}
}
Той, хто бере, charне може використовувати семантику перевантаження, на жаль, оскільки вона вирішить, string.Remove(int startIndex)оскільки вона є "ближча"
Це, звичайно, суто естетика, але мені це подобається ...