如何在C#中用空字符替换字符串中的字符
本文关键字:字符 替换 字符串 | 更新日期: 2023-09-27 17:59:23
我有一个这样的字符串:
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的字符串,效果是短划线消失,取而代之的是"nothing"。
val.Replace("-", "");
MSDN源
这看起来太简单了,但是:
val.Replace("-","");
string val = "123-12-1234";
val = val.Replace("-", ""); // result: 123121234
如果您想用空字符替换字符串中的字符,也就是说您想从字符串中删除该字符,请阅读R.Martinho Fernandes的答案。
以下是如何从字符串中删除字符的示例(替换为"空字符"):
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);
}
它一直困扰着我,没有办法"从字符串中移除字符";,仅";字符串中的字符串";。
我对阿列克谢·邦达列夫的答案进行了修改,并将其与标准的string.Replace(string, "")
进行了对比
| Method | Mean | Error | StdDev | Gen 0 | Allocated |
|--------------------- |---------:|----------:|---------:|-------:|----------:|
| StringReplace | 57.28 ns | 14.701 ns | 0.806 ns | 0.0063 | 40 B |
| RemoveCharFromString | 51.62 ns | 4.604 ns | 0.252 ns | 0.0216 | 136 B |
正如您所看到的,结果几乎相同,但"RemoveCharFromString"分配了3倍的内存。
寓意是——坚持String.Replace(string, "")
作为参考,这是我使用的方法:
public static string RemoveCharFromString(string input, char charItem)
{
int indexOfChar = input.IndexOf(charItem);
while (indexOfChar >= 0)
{
input = input.Remove(indexOfChar, 1);
indexOfChar = input.IndexOf(charItem, indexOfChar);
}
return input;
}
如果你在一个循环中,假设你循环通过一个要删除的标点符号列表,你可以做这样的事情:
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, "");
我有Razvan Dumitru的拉丁版本代码,因为我们甚至使用了百万指示符。我当然使用双重替换: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(), "");
}
}
不幸的是,采用CCD_ 9的一个不能使用重载语义,因为它将解析为CCD_;更紧密的";
这当然是纯粹的美学,但我喜欢它…