是否有一个原因?我问是因为如果您需要使用大量的空字符,那么您会遇到与使用大量的空字符串时相同的情况。
编辑:这种用法的原因是这样的:
myString.Replace ('c', '')
因此,从myString中删除所有'c'实例。
RemoveAll(this string s, params char[] toRemove)
呢?意图将得到明确传达,您不会冒犯任何错误的风险。
""
创建一个对象:不,它不会。
是否有一个原因?我问是因为如果您需要使用大量的空字符,那么您会遇到与使用大量的空字符串时相同的情况。
编辑:这种用法的原因是这样的:
myString.Replace ('c', '')
因此,从myString中删除所有'c'实例。
RemoveAll(this string s, params char[] toRemove)
呢?意图将得到明确传达,您不会冒犯任何错误的风险。
""
创建一个对象:不,它不会。
Answers:
没有一个空字符。您可以获得的最接近'\0'
的字符是Unicode“空”字符。鉴于您可以将其嵌入到字符串文字中或非常容易地表达它,为什么要为此单独使用一个字段?同样,“很容易混淆""
," "
”论点不适用'\0'
。
如果您可以举一个例子说明您想在哪里使用它以及为什么您认为它会更好,那可能会有所帮助...
Int32.Zero
,您会使用它代替文字0吗?如果没有,这里有什么区别?
与字符串不同,字符是固定大小的离散对象。字符串实际上是字符的容器。
因此,在这种情况下,Char.Empty确实没有任何意义。如果您有一个字符,则不为空。
使用Char.MinValue
与“ \ 0”相同的功能。但请注意,它与String.Empty
。
您可以使用可为空的字符。
char? c
如果不需要整个字符串,则可以利用延迟执行:
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
:)
没有回答您的第一个问题-但是对于您遇到的特定问题,您可以只使用字符串而不是char,对吗?
myString.Replace("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"
StringBuilder
的result
。为什么不包裹return s.Replace(charsToRemove,"");
?
如何BOM,神奇的人物微软添加到启动文件(至少XML)?
myString.Replace ('c', '')
可以通过实现myString.Replace ('c', UTF_BOM)
。然后,我想说的答案是“怎么不约......”。
如果要消除字符串中的空字符,则可以使用以下内容,只需将其转换为所需的任何数据类型表示即可。谢谢,
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());
}
}
}
就C#语言而言,以下内容可能没有多大意义。这不是问题的直接答案。但是愚弄是我在一种业务场景中所做的
char? myCharFromUI = Convert.ToChar(" ");
string myStringForDatabaseInsert = myCharFromUI.ToString().Trim();
if (String.IsNullOrEmpty(myStringForDatabaseInsert.Trim()))
{
Console.Write("Success");
}
在null
和white space
有不同的业务在我的项目流动。插入数据库时,empty string
如果是空白,则需要插入数据库。
我知道这个文件已经很老了,但是最近我遇到了一个问题,必须进行多次替换才能确保文件名的安全。首先,在最新的.NET字符串中。替换函数null等于空字符。话虽如此,.Net缺少的是简单替换所有内容,它将用所需的字符替换数组中的任何字符。请随时参考以下代码(在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));
}
}
}