[C#]关于对文本中符号的一些处理
场景1:
在开发过程中,我们经常会遇到有读数据库,取出字段中对应的字符串,但是字符串中会存在许多标点符号例如:
str=“year;month;day;”;
这是字段中插入了多组数据,使用特殊符号隔开。而我们在使用这些数据时又不得不将他们分开,单独取出字符串中的单个数据。
场景2:
我们获取到了上文str字符串,可是在我们转存时,其他客户端又不接收以“;”作为分割符的上传方式,需要转换为”,“或者其他符号。
场景一的解决方法
其实在C#中,开发人员已经考虑到了这一点并且帮助我们做好了这样的方法:
Split函数
这个函数中包含两个参数,第一个参数是占位参数,即占多少数组位置,第二个参数是筛选符号。
demo.Split(params char[] separator)
怎么用呢?
比如我们拿到了一个字符串str
string str = "years;months;days;time;"
string str2 = "years;months;days;time"
//注意,str与str2的区别在于串内容结尾是否包含一个”;“
现在要把其中的内容分割出来,分割为years months days time
首先定义一个string类型的数组
string[] a = str.Split[new char[1] { ';' }];
string[] b = str.Split[new char[1] { ';' }];
那么问题来了,取好后的a b相同吗?
自然是不同的。a.Length>b.Length
因为a在取时以";“为节点分割,str的末尾存在”;"符号,因此末尾符号后多取了一个空值。
/*这里直接给出完整示例,大家可以运行一试*/
static void Main(string[] args)
{
try
{
string b = "a;s;d;f;";
string e = "a;s;d;f";
string[] a = b.Split(new char[1] { ';' });
string[] h = e.Split(new char[1] { ';' });
int c = a.Length;
int i = h.Length;
Console.WriteLine(c);
Console.WriteLine(i);
Console.WriteLine(a[3]);
Console.ReadKey();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadKey();
}
}
场景二的解决方法
这个场景就非常好解决啦,现在从上头获取了一个字符串
string str = "year;month;day;";
然后我们要转发给下家,下家要求:我们只接受这样格式的!
string str_nextstep = "year,month,day,";
哎呀这不诚心找不痛快吗!但既然需求提了,咱就给解决吧。这个操作就非常简单了!我们用到两个很熟悉的方法:
Contains()和 Replace()
Contains(a),用于判断字符中是否包含(注意,不是匹配,是包含)a字符
Replace(c,d),用于更改,将字符中的c更改为d
当然了我们做程序要严谨嘛,所以有必要使用Contains来判断一下上家给的字符串包不包含特殊符号
string taskinfo = "a;b;c;d;";
//查看是否包含该特殊符号
if (taskinfo.Contains(";"))//将提取出来带;号的更改为,上传
{
taskinfo = taskinfo.Replace(";", ",");
}
Console.Writeline(taskinfo);
运行一下看看,是不是变成了"a,b,c,d,"?