[英]How to replace a char in string with an Empty character in C#.NET
我有一个这样的字符串:
string val = "123-12-1234";
如何使用 C# 中的空字符串替换破折号。
我的意思是val.Replace(char oldChar, newChar);
oldChar
和newChar
中需要 go 什么。
您可以使用采用字符串的不同重载Replace()
。
val = val.Replace("-", string.Empty)
由于这里的其他答案即使正确,也没有明确解决您最初的疑问,我会这样做。
如果你调用string.Replace(char oldChar, char newChar)
它将用另一个字符替换一个字符的出现。 它是一对一的替代品。 因此,结果字符串的长度将相同。
您想要的是删除破折号,这显然与用另一个字符替换它们不同。 您不能用“无字符”替换它,因为 1 个字符始终是 1 个字符。 这就是为什么你需要使用带字符串的重载:字符串可以有不同的长度。 如果将长度为 1 的字符串替换为长度为 0 的字符串,则效果是破折号消失了,取而代之的是“无”。
这看起来太简单了,但是:
val.Replace("-","");
val.Replace("-", "");
如果您想用空字符替换字符串中的字符,这意味着您要从字符串中删除该字符,请阅读 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 val = "123-12-1234";
val = val.Replace("-", ""); // result: 123121234
如果您处于循环中,假设您遍历要删除的标点符号列表,您可以执行以下操作:
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 代码的拉丁版本,因为我们甚至使用了百万指标。 Offcourse我使用双重替换: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)
因为它“更接近”
这当然是纯粹的美学,但我喜欢它......
它总是困扰着我,没有办法“从字符串中删除一个字符”,只能“从字符串中删除字符串”。
我采用了 Alexei Bondarev 的答案的修改版本,并根据标准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”分配了 3X memory。
道德是 - 坚持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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.