我有
string data = "a,bn,,rf,,";
并将其拆分为字符串数组
string []dataArray = data.Split(',',data);
and array become {"a", "bn", "", "", "rf", "", ""};
如何将""
替换为"-"
?
还有其他方便吗?
感谢您的帮助。
答案 0 :(得分:9)
您可以使用Select()投影拆分方法返回的结果并执行此操作:
var result = data.Split(',')
.Select(d=> d == String.Empty ? "-" : d);
现在可以给你:
{" a"," bn"," - "," - "," rf" ," - "," - "}
如果你只需要使用this overload的非空字符串,你也可以消除这些:
var result = data.Split(new char[] {','},StringSplitOptions.RemoveEmptyEntries);
将为您提供如下结果:
{" a"," bn"," rf"}
答案 1 :(得分:4)
这是一个非常简单的直接处理方法。
for(int i=0; i < dataArray.Length; i++)
{
if(dataArray[i] == string.Empty)
{
dataArray[i] = "-";
}
}
如果要在拆分之前处理此问题,可以使用正则表达式替换。 (我只是包括这个,因为人们不断给出错误的字符串替换答案)
data = Regex.Replace(data, "(?<=^|,)(?=,|$)", "-");
这将检查字符串的开头或逗号之前的空字符串,后面跟逗号或字符串的结尾,并用短划线替换该空字符串。
答案 2 :(得分:1)
通常最好在将对象的值变为您打算使用的数据类型之前更改对象的值。
string data = "a,bn,,rf,,";
string replacementCharacter = "-";
//if we know we want a hyphen character where a string.Empty would be, do it now.
data = data.Replace(",,", "," + replacementCharacter + ",").Trim();
if (data.EndsWith(",")) { data += "-"; }
if (data.StartsWith(",")) { data = "-" + data; }
然后你的数组将是你想要的变异,你不必查询数组或迭代它来修复它。
编辑:更新它以调整空白的最后索引和回车。
答案 3 :(得分:0)
这是我之前为实现这个目的而写的扩展函数
public static class Extensions
{
public static string[] CustomSplit(this string toSplit, char delimiter, string emptyEntities) =>
toSplit.Split(delimiter).Select(c => c == string.Empty ? emptyEntities : c).ToArray();
}
你可以像
一样使用它var result = "a,bn,,rf,,".CustomSplit(',', "-");
答案 4 :(得分:-1)
迭代结果,然后检查结果是null还是空。如果是,则将其替换为 - 。
答案 5 :(得分:-1)
您可以使用此代码我希望这会对您有所帮助。
string data = "a,bn,,rf,,";
string[] dataArray = data.Split(',').Select(c => { c = (c == "") ? "-" : c; return c; }).ToArray();
答案 6 :(得分:-4)
没有LINQ
var result = data.Split(',', data).Replace(String.Empty, "-");