日期:2014-05-20  浏览次数:20776 次

因项目需要,写了一个String切割String方法,抛砖引玉,希望大家给个效率更高的算法
如题,
都是Split()方法惹的祸,
只能用单个char来切割字符串,
用char[]更是形同鸡肋....
没办法,只能先写个用着,
这个方法稍微改动下,
就能用List<String>切割的.

代码如下,
希望大家给个更好的算法.
C# code

        public static List<string> splitByStr(string str, string splitStr)
        {
            List<string> re = new List<string>();
            if (string.IsNullOrEmpty(str) || string.IsNullOrEmpty(splitStr) || str.Length <= splitStr.Length)
            {
                return re;
            }
            int cnt = str.Length - splitStr.Length;
            int k = 0;
            for (int i = 0; i < cnt; i++)
            {
                string tmpStr = str.Substring(i, splitStr.Length);
                if (tmpStr.Equals(splitStr))
                {
                    re.Add(str.Substring(k, i - k));
                    k = i + splitStr.Length;
                }
                if (i == cnt - 1)
                {
                    re.Add(str.Substring(k, str.Length - k));
                }
            }
            return re;
        }



------解决方案--------------------
C# code

        public static string[] Split(string s, string SplitChar)
        {
            string[] returnValue = null;

            if (s.Contains(s) == false)
                returnValue = new string[] { s};
            else
                returnValue = s.Split(char.Parse(SplitChar));

            return returnValue;
        }

------解决方案--------------------
不错啊 看看
------解决方案--------------------
string的Split本来就有一个重载是传入string[]参数进行对string分割的啊……
------解决方案--------------------
也可以尝试用Regex.Split()来实现分割
------解决方案--------------------
mark 学习
------解决方案--------------------
接分,学习。
------解决方案--------------------
String.Split有很多重载的方法

由此可见对.net 类的熟悉可以提高生产效率
------解决方案--------------------
??
似乎好像我没记错的话,split应该本身就支持string[]才对
------解决方案--------------------
探讨

C# code

//不知我这样理解 能不能满足你的本意?
public static List<string> splitByStr(string str, string splitStr)
{
return Regex.Split(str,"(?:"+splitStr+")").ToList();
}

------解决方案--------------------
除非你是WinCE程序,否则这问题就太没水平了...
------解决方案--------------------
没明白要干嘛
------解决方案--------------------
貌似楼主想多了。。。请看如下代码

C# code
string str="aaajsbbbjsccc";

string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);

foreach (string i in sArray) Response.Write(i.ToString() + "<br>");



输出结果:
aaa
bbb
ccc
 

2、用多个字符来分隔:

string str="aaajbbbscccjdddseee";

string[] sArray=str.Split(new char[2]{'j','s'}); 

foreach(string i in sArray) Response.Write(i.ToString() + "<br>"); 



输出结果:
aaa
bbb
ccc
ddd
eee

------解决方案--------------------
C# code

List<string> re = new List<string>();
            if (string.IsNullOrEmpty(str) || string.IsNullOrEmpty(splitStr) || str.Length <= splitStr.Length)
            {
                return re; // re.Add(str);
            }