c# -替换字符串中的字符
本文关键字:字符 字符串 替换 | 更新日期: 2023-09-27 18:10:56
我有一个包含登录名、数据库和密码的字符串。
string str = "user Id=abc, database=DDD, Password=mypasswd"
我希望能够用不同的值替换数据库值"DDD"。
我尝试使用字符串。替换,但我不知道现有的数据库将是什么。
有谁知道一个简单的解决方案吗?
以下是MSDN唯一推荐的防止连接字符串注入攻击的方法
http://msdn.microsoft.com/en-us/library/ms254947.aspx// cs stores previous connection string which came from config
System.Data.SqlClient.SqlConnectionStringBuilder builder =
new System.Data.SqlClient.SqlConnectionStringBuilder(cs);
builder.InitialCatalog = "NEWDB";
// you get your database name replaced properly...
cs = builder.ToString();
根据数据库或数据库驱动程序的类型,您必须使用不同的类,对于MySql,它应该是MySqlConnectionStringBuilder和属性名称可能是database .
另一种选择是使用正则表达式,它将为您完成替换:
using System.Text.RegularExpressions;
string cStr = "user Id=abc, database=DDD, Password=mypasswd";
Console.WriteLine(cStr);
Regex r = new Regex("(?<=database=)(.+?)(?=,)");
cStr = r.Replace(cStr, "NewDatabaseName");
Console.WriteLine(cStr);
注意:这是编译,运行,并与scriptcs
验证,所以它是相当可放到您的解决方案
使用String.Format如何?
string username = "abc";
string database = "myDB";
string password = "my_pw";
string str = String.Format("user Id={0}, database={1}, Password={2}",
username, database, password);
然后您可以从配置文件中加载这些值(甚至整个连接字符串)
正则表达式也是一个选项:
string str = "user Id=abc, database=DDD, Password=mypasswd",
newDatabase = "newDb";
Console.WriteLine( Regex.Replace( str, @"(?<=database=)(.*?)(?=,)", m => newDatabase ) );
在逗号分隔符处分割字符串,然后取结果数组的第二个索引,在等号分隔符处分割,替换第二个元素,然后重新组合所有
string str = "user Id=abc, database=DDD, Password=mypasswd";
string[] parts = str.Split(',');
string[] dbparts = parts[1].Split('=');
dbparts[1] = "new_database_name";
parts[1] = string.Join("=", dbparts);
string final = string.Join(", ", parts);
同上,但如果你喜欢LINQ
string str = "user Id=abc, database=DDD, Password=mypasswd";
var q = from part in str.Split(new[] {','})
let trimedPart= part.Trim()
let replacedPart =trimedPart.StartsWith("database=")?trimedPart.Replace("DDD","newValue"):trimedPart
select replacedPart;
var newConStr = q.Aggregate((current, next) => current + "," + next);
这些解决方案都很棒,但是长而令人困惑的一行不是有一定的优雅吗?
"user Id=abc, database=DDD, Password=mypasswd".Substring(0, "user Id=abc, database=DDD, Password=mypasswd".IndexOf("database=")) + "database=" + "[YOUR VALUE HERE]" + ", " + "user Id=abc, database=DDD, Password=mypasswd".Substring("user Id=abc, database=DDD, Password=mypasswd".IndexOf("Password="))
输出:user Id=abc, database=[YOUR VALUE HERE], Password=mypasswd