需求如下:
一个字符串,如 Nike;Add;;Tee;;;;LiNing;Puma;;;
得到的字符串组 {"Nike","Add","Tee","LiNing","Puma"}
也就是需要將字符串中的分号全部去掉
我自己的代码如下(感觉很没有效率):
string GetReceiveStr(string str)
{
string strResult = string.Empty;
if (str.Length > 0)
{
strResult = str;
while (true)
{
if (str.Substring(0, 1) == ";")
{
strResult = str.Substring(1);
}
else if (str.Substring(str.Length - 1, 1) == ";")
{
strResult = str.Substring(0, str.Length - 1);
}
else if (str.IndexOf(";;") > -1)
{
strResult = str.Replace(";;", ";");
}
else
break;
}
}
return strResult;
}
一个字符串,如 Nike;Add;;Tee;;;;LiNing;Puma;;;
得到的字符串组 {"Nike","Add","Tee","LiNing","Puma"}
也就是需要將字符串中的分号全部去掉
我自己的代码如下(感觉很没有效率):
string GetReceiveStr(string str)
{
string strResult = string.Empty;
if (str.Length > 0)
{
strResult = str;
while (true)
{
if (str.Substring(0, 1) == ";")
{
strResult = str.Substring(1);
}
else if (str.Substring(str.Length - 1, 1) == ";")
{
strResult = str.Substring(0, str.Length - 1);
}
else if (str.IndexOf(";;") > -1)
{
strResult = str.Replace(";;", ";");
}
else
break;
}
}
return strResult;
}
private void Form1_Load(object sender, EventArgs e)
{
String a = "Nike;Add;;Tee;;;;LiNing;Puma;;;";
String[] b = a.Split(new char[]{';'}, StringSplitOptions.RemoveEmptyEntries);
foreach (string t in b)
MessageBox.Show(t);
}
效率应该是较好了。注意加StringSplitOptions.RemoveEmptyEntries
循环处理1楼的也不错,不过如果字符初始化长度超过32K * n (n根据操作系统而定)
应该还是StringBuilder实现快,初始化速度差别大
你有把握自写的函数比 strtok 函数还快?
你有把握自写的函数比 boost 的 tokenizer 还快?兄弟你在那个科学研究所工作,还需要人手不,拉上小弟一把可以不?
str = Regex.Replace(str, @";+", ";");
String[] my = str.Split( ';' );
for (int i = 0; i < my.Length; i++)
{
Console.WriteLine(my[i]);
}
正则版本.