我有一个这样的字符串:
select name,lastname,email from contacts
我想替换 +“|”+ 的逗号 得到这样的东西
select name+"|"+lastname+"|"+email from contacts
用string.Replace(“,”,+“|”+);
很容易但问题是当我面对这样的字符串时:
select name,lastname,isnull(email,0) from contacts
如何检测以避免isnull()中的逗号? 使用替换我得到一个像这样的字符串
select name+"|"+lastname+"|"+isnull(email+"|"+0) from contacts
那就错了!
谢谢。
答案 0 :(得分:3)
试试这个:
public static string ReplaceTopLevelCommas(string query)
{
var newQuery = new StringBuilder();
var level = 0;
foreach (var c in query)
{
if (c == ',')
{
if (level == 0)
{
newQuery.Append("+\"|\"+");
}
else
{
newQuery.Append(c);
}
}
else
{
if (c == '(')
{
level++;
}
else if (c == ')')
{
level--;
}
newQuery.Append(c);
}
}
return newQuery.ToString();
}
只有当逗号不在括号内时才会替换逗号。所以它也适用于多层嵌套。
答案 1 :(得分:2)
只需编写自己的方法:
private static string replace_commas(String str_)
{
StringBuilder str = new System.Text.StringBuilder(str_);
bool replace = true;
for(int i = 0; i != str.Length; ++i)
{
if(str[i] == ',' && replace)
str[i] = '|';
if(str[i] == '(')
{
replace = false;
continue;
}
if(str[i] == ')' && !replace)
replace = true;
}
return str.ToString();
}
你填空了! : - )