为什么没有Char.Empty就像String.Empty?
这是有原因吗? 我在问这个,因为如果你需要使用大量的空字符,那么你就会遇到和使用大量空string一样的情况。
编辑:这种用法的原因是这样的:
myString.Replace ('c', '')
所以从myString中删除'c's的所有实例。
没有空的字符。 您可以得到最接近的是'\0'
,即Unicode“空”字符。 既然你可以把它embedded到string文字中或者很容易地expression出来,为什么还要为它分开一个字段呢? 同样,“很容易混淆""
和" "
“参数不适用于'\0'
。
如果你能举一个你想使用它的例子,为什么你认为它会更好,那可能会有帮助。
你的陈述
myString.Replace ('c', '\0')
不会删除任何字符。 它将用'\0'
(string结尾,EOS)replace它们,结果会有所不同。 一些string操作在遇到EOS时可能会停止,但在.NET中,大多数操作将像处理其他字符一样处理。 尽量避免'\0'
。
这个用法的原因是这样的:
myString.Replace ('c', '')
所以从myString中删除'c'
所有实例。
要从string中删除特定的字符,可以使用string重载:
myString = myString.Replace ("c", String.Empty);
字符不像string,是一个固定大小的离散事物。 一个string实际上是一个字符的容器。
所以,Char.Empty在这种情况下并没有什么意义。 如果你有一个字符,它不是空的。
没有空的人物。 它总是包含一些东西 。 即使“\ 0”是一个字符。
使用与'\ 0'相同的Char.MinValue
。 但要小心它不是像String.Empty
。
你可以使用可空字符。
char? c
如果你不需要整个string,你可以利用延迟执行:
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是一个值types,所以它的值不能为空。 (除非包装在可空的容器中)。
由于它不能为空,所以包含一些数字代码,并且每个代码映射到某个字符。
不是你的问题的答案,而是表示一个你可以使用的默认char
default(char)
与char.MinValue
相同, char.MinValue
与\0
相同。 一个人不应该使用,如果像空string,但是。
myString = myString.Replace('c'.ToString(), "");
好吧,这不是特别优雅的去除字母,因为.Replace方法有一个重载string参数。 但这适用于删除回车符,换行符,制表符等。本示例删除制表符:
myString = myString.Replace('\t'.ToString(), "");
使用
myString.Replace ("c", "")
BOM如何,微软添加到文件的起始(至less是XML)的魔法字符?
不回答你的第一个问题 – 但是对于你的具体问题,你可以使用string,而不是字符,对吗?
myString.Replace("c", "")
有一个原因,你不想这样做?
如果你想清除string中的空字符,下面的工作,只要转换为任何你想要的数据types表示。 谢谢,
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"); }
这个white space
在我的项目中有不同的业务stream程。 在插入数据库时,如果是空格,我需要将empty string
插入数据库。
我知道这是一个很老的,但最近我遇到了一个问题,必须做多个replace,以使文件名安全。 首先,在最新的.NET string.Replace函数中null等价于空字符。 话虽如此,.Net所缺less的是一个简单的replace,它将用一个所需的字符replace数组中的任何字符。 请随时参考下面的代码(运行在LinqPad进行testing)。
// 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)); } } }
您也可以按字符重build您的string,不包括您想要删除的字符。
这是一个扩展方法来做到这一点:
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"
如果你想删除满足特定条件的字符,你可以使用这个:
string s = "SoMEthInG"; s = new string(s.ToCharArray().Where(c => char.IsUpper(c)).ToArray());
(这将只留下string中的大写字符。)
换句话说,您可以将string转换为IEnumerable<char>
,对其进行更改,然后将其转换回string,如上所示。
同样,这样做不仅可以删除特定的字符,因为lambdaexpression式,尽pipe如果更改lambdaexpression式就可以这样做: c => c != 't'
。
最简单的方法来从string中删除一个字符是修剪它
cl = cl.Trim(' ');
删除string中的所有空格