这是有原因的吗?我问这个问题是因为如果您需要使用大量的空字符,那么您会遇到使用大量空字符串时相同的情况。
编辑:这种用法的原因是:
myString.Replace ('c', '')
请从myString中删除所有 'c' 的实例。
这是有原因的吗?我问这个问题是因为如果您需要使用大量的空字符,那么您会遇到使用大量空字符串时相同的情况。
编辑:这种用法的原因是:
myString.Replace ('c', '')
请从myString中删除所有 'c' 的实例。
char是一种值类型,因此它的值不能为null。(除非它被包装在可空容器中)。
由于它不能为null,所以它包含一些数字代码,并且每个代码都映射到某个字符。
虽然不能回答你的第一个问题,但是针对你遇到的特定问题,你可以使用字符串代替字符,是吗?
myString.Replace("c", "")
有没有任何理由不希望这样做?
如果您查看String.Replace 替换字符串 (String, String) 重载的文档,可以在备注部分看到,如果第二个参数是 null
,则会删除所有指定的内容。因此,如果您只使用myString = myString.Replace("c", null);
,它将删除字符串中的每个 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,"");
包装起来呢? - aloisdg就C#语言而言,以下内容可能没有太多意义。这也不是对问题的直接回答。但以下是我在一个业务场景中所做的。
char? myCharFromUI = Convert.ToChar(" ");
string myStringForDatabaseInsert = myCharFromUI.ToString().Trim();
if (String.IsNullOrEmpty(myStringForDatabaseInsert.Trim()))
{
Console.Write("Success");
}
null
和white space
有不同的业务流程。在插入数据库时,如果是white space
,我需要将empty string
插入到数据库中。请保留HTML标签。string s = "SoMEthInG";
s = new string(s.Where(c => char.IsUpper(c)).ToArray());
(这将使字符串中只保留大写字符。)
换句话说,您可以将字符串“使用”为 IEnumerable<char>
,对其进行更改,然后像上面所示将其转换回字符串。
同样,这不仅因为 lambda 表达式而能够删除特定字符,尽管如果您更改 lambda 表达式,也可以这样做: c => c != 't'
。
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());
}
}
}
我知道这个问题很老,但最近遇到了一个问题,需要进行多次替换才能使文件名变得安全。首先,在最新的.NET string.Replace函数中,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));
}
}
}
那么BOM呢?这是微软添加到文件开头(至少是XML)的神奇字符。
myString.Replace('c', UTF_BOM)
来实现myString.Replace('c', '')
。那么我的回答是“怎么可能呢...”。 - bzlm
RemoveAll(this string s, params char[] toRemove)
?这样就可以清晰地传达意图,同时避免出错。 - bzlm