这是有原因的吗?我问这个问题是因为如果您需要使用大量的空字符,那么您会遇到使用大量空字符串时相同的情况。
编辑:这种用法的原因是:
myString.Replace ('c', '')
请从myString中删除所有 'c' 的实例。
这是有原因的吗?我问这个问题是因为如果您需要使用大量的空字符,那么您会遇到使用大量空字符串时相同的情况。
编辑:这种用法的原因是:
myString.Replace ('c', '')
请从myString中删除所有 'c' 的实例。
不存在空字符这样的东西。你能得到的最接近的是Unicode编码的 "null" 字符:'\0'
。考虑到你可以很容易地将它嵌入字符串字面值或单独表达它,为什么还要为它单独设置一个字段呢?同样,"很容易混淆""
和" "
参数" 的论点不适用于'\ 0'
。
如果你能举出想要使用它的例子以及你认为它会更好的原因,那可能会有所帮助...
Int32.Zero
的字段,你会使用它来代替字面量 0 吗?如果不会,那么这里有什么区别? - Jon Skeet这种用法的原因是这样的:
myString.Replace('c', '')
所以从myString中删除所有实例'c'
。
要从字符串中删除特定字符,您可以使用字符串重载:
myString = myString.Replace ("c", String.Empty);
您的声明
myString.Replace ('c', '\0')
不会删除任何字符。它只会用'\0'
(字符串结尾,EOS)替换它们,并产生不同的后果。一些字符串操作在遇到EOS时可能会停止,但在.NET中,大多数操作将像对待任何其他字符一样处理它。最好尽可能避免使用'\0'
。
字符(Char)与字符串(String)不同,它是一个具有固定大小的离散对象。字符串实际上是一组字符的集合。
因此,在这种情况下,Char.Empty并没有实际意义。如果你有一个字符,它就不是空的。
没有所谓的空字符。它总是包含某些东西。即使'\0'也是一个字符。
使用Char.MinValue
,它与 '\0' 相同。但请注意,它与 String.Empty
不同。
你可以使用可空字符(nullable chars)。
char? c
这并非回答你的问题,但是要表示 char
的默认值,你可以使用
default(char)
这与char.MinValue
相同,后者又等同于\0
。但不应将其用于像空字符串之类的内容。
myString = myString.Replace('c'.ToString(), "");
好的,这种方法并不是特别优雅地删除字母,因为.Replace方法有一个接受字符串参数的重载。但是这个方法可以用来删除回车、换行符、制表符等。下面的例子是删除制表符:
myString = myString.Replace('\t'.ToString(), "");
myString = myString.Replace("\t", "");
这个不是更短更清晰吗? - Heretic Monkey如果您不需要整个字符串,可以利用延迟执行的优势:
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"
int.Empty
一样。容器可以为空,标量值不能。如果你指的是0(不是空的),那么使用'\0'
。如果你指的是null
,那么使用null
:)
RemoveAll(this string s, params char[] toRemove)
?这样就可以清晰地传达意图,同时避免出错。 - bzlm