这有什么原因吗?我问这个问题是因为如果你需要使用大量的空字符,那么你就会陷入与你使用大量空字符串时相同的情况。
编辑:这种用法的原因是:
myString.Replace ('c', '')
所以从myString中移除所有的'c'实例。
这有什么原因吗?我问这个问题是因为如果你需要使用大量的空字符,那么你就会陷入与你使用大量空字符串时相同的情况。
编辑:这种用法的原因是:
myString.Replace ('c', '')
所以从myString中移除所有的'c'实例。
当前回答
myString = myString.Replace('c'.ToString(), "");
好吧,这对于删除字母来说不是特别优雅,因为. replace方法有一个接受字符串参数的重载。但这适用于删除回车符、换行符、制表符等。下面的例子删除了制表符:
myString = myString.Replace('\t'.ToString(), "");
其他回答
如果你不需要整个字符串,你可以利用延迟执行:
public static class StringExtensions
{
public static IEnumerable<char> RemoveChar(this IEnumerable<char> originalString, char removingChar)
{
return originalString.Where(@char => @char != removingChar);
}
}
你甚至可以组合多个字符……
string veryLongText = "abcdefghijk...";
IEnumerable<char> firstFiveCharsWithoutCsAndDs = veryLongText
.RemoveChar('c')
.RemoveChar('d')
.Take(5);
... 并且只计算前7个字符:)
编辑:或者更好:
public static class StringExtensions
{
public static IEnumerable<char> RemoveChars(this IEnumerable<char> originalString,
params char[] removingChars)
{
return originalString.Except(removingChars);
}
}
及其用法:
var veryLongText = "abcdefghijk...";
IEnumerable<char> firstFiveCharsWithoutCsAndDs = veryLongText
.RemoveChars('c', 'd')
.Take(5)
.ToArray(); //to prevent multiple execution of "RemoveChars"
如果要消除字符串中的空字符,下面的方法可以工作。只需转换为您想要的任何数据类型表示。
private void button1_Click(object sender, EventArgs e)
{
Int32 i;
String name;
Int32[] array_number = new int[100];
name = "1 3 5 17 8 9 6";
name = name.Replace(' ', 'x');
char[] chr = name.ToCharArray();
for (i = 0; i < name.Length; i++)
{
if ((chr[i] != 'x'))
{
array_number[i] = Convert.ToInt32(chr[i].ToString());
MessageBox.Show(array_number[i].ToString());
}
}
}
如果你查看文档替换(字符串,字符串)重载字符串。替换您可以在备注部分中看到,如果第二个参数为空,则它将删除您指定的所有实例。因此,如果你使用myString = myString。替换(“c”,零);它会删除字符串中的每一个c。
还可以逐字符重新构建字符串,排除想要删除的字符。
下面是一个扩展方法:
static public string RemoveAny(this string s, string charsToRemove)
{
var result = "";
foreach (var c in s)
if (charsToRemove.Contains(c))
continue;
else
result += c;
return result;
}
它既不圆滑也不花哨,但效果很好。
像这样使用:
string newString = "My_String".RemoveAny("_"); //yields "MyString"
我知道这个很老了,但我最近遇到了一个问题,必须进行多次替换才能使文件名安全。首先,在最新的。net字符串中。替换函数null相当于空字符。话虽如此,. net中缺少的是一个简单的replace all,它将数组中的任何字符替换为所需的字符。请随意参考下面的代码(在LinqPad上运行测试)。
// LinqPad .ReplaceAll and SafeFileName
void Main()
{
("a:B:C").Replace(":", "_").Dump(); // can only replace 1 character for one character => a_B_C
("a:B:C").Replace(":", null).Dump(); // null replaces with empty => aBC
("a:B*C").Replace(":", null).Replace("*",null).Dump(); // Have to chain for multiples
// Need a ReplaceAll, so I don't have to chain calls
("abc/123.txt").SafeFileName().Dump();
("abc/1/2/3.txt").SafeFileName().Dump();
("a:bc/1/2/3.txt").SafeFileName().Dump();
("a:bc/1/2/3.txt").SafeFileName('_').Dump();
//("abc/123").SafeFileName(':').Dump(); // Throws exception as expected
}
static class StringExtensions
{
public static string SafeFileName(this string value, char? replacement = null)
{
return value.ReplaceAll(replacement, ':','*','?','"','<','>', '|', '/', '\\');
}
public static string ReplaceAll(this string value, char? replacement, params char[] charsToGo){
if(replacement.HasValue == false){
return string.Join("", value.AsEnumerable().Where(x => charsToGo.Contains(x) == false));
}
else{
if(charsToGo.Contains(replacement.Value)){
throw new ArgumentException(string.Format("Replacement '{0}' is invalid. ", replacement), "replacement");
}
return string.Join("", value.AsEnumerable().Select(x => charsToGo.Contains(x) == true ? replacement : x));
}
}
}