张三a男b15||李四a女b15以上是字符串!如何把字符串分解成张三 男 15
李四 女 15如何插入到数据库???
我采集的数据都是这种格式!

解决方案 »

  1.   

    按照特定的格式分割字符串后就可以存库了        public string gGetWord(ref string s, string Ch)
            {
                string str = null;
                int i;
                i = s.IndexOf(Ch);
                if (i >= 0)
                {
                    str = s.Substring(0, i);
                    s = s.Substring(i + Ch.Length);
                }
                else
                {
                    str = s;
                    s = string.Empty;
                }
                return str;
            }
      

  2.   

    代码有些丑,不过测试过,能用。
    至于怎么插入数据库,不知道楼主用的是什么数据,数据库属性是什么,就不做那一步了,想要具体插入数据库的方法,可以找我。
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;namespace Date1223_2
    {
        class SpiltString
        {
            //假设一行数据中,有很多组数据,每组数据用“||”分开
            //如果只有两组数据,不用递归那么麻烦。
            //对一行数据进行第一次分离
            public ArrayList FirstSpilt(string str)
            {
                int i = str.IndexOf("|");
                int ct = str.Length;
                string str1 = null;
                
                ArrayList list = new ArrayList();
                if (i > 0)
                {
                    str1 = str.Substring(0, i);
                    string str2 = str.Substring((i + 2), (ct - i - 2));
                    list = FirstSpilt(str2);
                   
                }
                else
                {
                    str1 = str;
                }
                list.Add(str1);
                return list;
            }        //第二次分离。使用到了“out”
            public void SecondSpilt(string str, out string name, out string gender, out int age)
            {
                int indexA = str.IndexOf("a");
                int indexB = str.IndexOf("b");
                name = str.Substring(0, indexA);
                gender = str.Substring(indexA+1, indexB - indexA-1);
                age = Int32.Parse(str.Substring(indexB+1,str.Length-indexB-1));
            }        
        }    class Test
        {
            public static void Main(String[] args)
            {
                string str = "张三a男b20||李四a男b25||钱五a女b18";            SpiltString ss = new SpiltString();
                ArrayList list = ss.FirstSpilt(str);
                string name;
                string gender;
                int age;            foreach (object obj in list)
                {
                    //数据彻底分离
                    ss.SecondSpilt(obj.ToString(), out name, out gender, out age);                //打印。这里可以将name,gender,age,插入数据库
                      //好像性别一般都是用bool来储存的,如果是的话,还要加工一下。
                    Console.WriteLine(name + " " + gender + " " + age);
                }            Console.ReadLine();
                
            }
        }
    }
      

  3.   

    string a="姓名张三性别男年龄15姓名李四性别女年龄15 ";
    string b=a.Replace("姓名","\r\n");
    b=b.Replace("性别"," ");
    b=b.Replace("年龄"," ");
    this.label1.Text=b;
    this.textBox1.Text=b;
      

  4.   

    string   a="姓名张三性别男年龄15姓名李四性别女年龄15   "; 
    string   b=a.Replace("姓名","\r\n"); 
    b=b.Replace("性别","\t"); 
    b=b.Replace("年龄","\t"); 
    this.label1.Text=b; 
    this.textBox1.Text=b;
      

  5.   


        protected void tSplit(object sender, EventArgs e)
        {
            char[] theStr = tStr.Text.ToCharArray();
            char theSplitChar = 'a';
            string noteStr = "";
            string resultStr = "";
            int justId=0;        for (int i = 0; i < theStr.Length; i++) {
                if (theStr[i] == theSplitChar) {
                    for (; justId < i; justId++) {
                        resultStr += theStr[justId].ToString();
                    }
                    resultStr += " ";
                    justId++;
                    theSplitChar = (char)((short)theSplitChar + 1);
                }
            }
            if (justId < theStr.Length) {
                for (; justId < theStr.Length; justId++) {
                    resultStr += theStr[justId].ToString();
                }
            }            lb1.Text =resultStr;
        }  在前台的页面中,有个字符串的输入地方,有个label标签进行信息的输出,经过测试,能够实现功能!
      

  6.   

    你在帖子里面,又问到了“姓名张三性别男年龄15姓名李四性别女年龄15 ”这样的字符串格式。
    在给我的短信中,问道了“张三a男b20李四a男b25钱五a女b18”这种格式。第一种格式,加上:将姓名,性别,年龄替换成||,a,b的代码,就能用上以前的代码。
    第二种格式,我新加了一段。现在我假设,你要读取的字符串里面,至少有三种格式。我思路是,用继承加工厂设计模式。那样,不管你读入的是什么格式,都会自动分离成你需要的那种格式。using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;namespace Date12241
    {
        /// <summary>
        /// 基本上,如果还有别的格式,可以自己添加继承子类
        /// </summary>
        public class SpiltStringNew
        {
            protected string originalString;
            public string GetOriginalString
            {
                get { return originalString; }
                set { originalString = value; }
            }        protected string changedString;
            public string GetChangedString
            {
                get { return changedString; }
                set { changedString = value; }
            }        public ArrayList SpiltStr()
            {
                string str = changedString;
                ArrayList list = new ArrayList();
                string str1 = "";
                foreach (char c in str)
                {                if (c != '|')
                    {
                        str1 += c.ToString();
                    }
                    else if (str1 != "")
                    {
                        list.Add(str1);
                        str1 = "";
                    }
                }
                list.Add(str1);
                return list;
            }        public void SecondSpilt(string str, out string name, out string gender, out int age)
            {
                int indexA = str.IndexOf("a");
                int indexB = str.IndexOf("b");
                name = str.Substring(0, indexA);
                gender = str.Substring(indexA + 1, indexB - indexA - 1);
                age = Int32.Parse(str.Substring(indexB + 1, str.Length - indexB - 1));
            }        public virtual ArrayList FirstSpilt()
            {
                ArrayList list = new ArrayList();
                return list;
            }
        }    //标准分割:三a男b15 ¦ ¦李四a女b15 
        public class StandardFirstSpilt : SpiltStringNew
        {
            public override ArrayList FirstSpilt()
            {
                changedString = originalString;
                ArrayList list = SpiltStr();
                return list;
            }
        }    //“姓名张三性别男年龄15姓名李四性别女年龄15”中文切割记号的分割
        public class ChineseFirstSpilt : SpiltStringNew
        {
            public override ArrayList FirstSpilt()
            {
                changedString = originalString.Replace("姓名", "||");
                changedString = changedString.Replace("性别", "a");
                changedString = changedString.Replace("年龄", "b");            ArrayList list = SpiltStr();
                return list;
            }    }    //张三a男b20李四a男b25钱五a女b18,没有“|”符号的切割。
        public class NoMarkFirstSpilt : SpiltStringNew
        {
            public override ArrayList FirstSpilt()
            {
                string str1 = "";
                ArrayList list = new ArrayList();
                int ct = originalString.Length;
                for (int i = 0; i < originalString.Length; i++)
                {
                    str1 += originalString[i];
                   
                     if ((i == ct - 1)||Char.IsDigit(originalString, i)&&(!Char.IsDigit(originalString, i + 1)) )
                    {
                        list.Add(str1);
                        str1 = "";
                    }
                   
                   
                  
                }
                return list;
            }
        }    //工厂,选择哪种分割模式
        public static class SpiltStringFactory
        {
            public static SpiltStringNew CreateSpilt(string str)
            {
                SpiltStringNew firstSpilt = null;
                bool  = false;
                bool latter = false;
                foreach (char c in str)
                {
                    if (c == '|')
                         = true;
                    else if (c == 'a')
                    {
                        latter = true;
                    }
                }            if ()
                {
                    firstSpilt = new StandardFirstSpilt();
                }
                else if (latter)
                {
                    firstSpilt = new NoMarkFirstSpilt();
                }
                else
                {
                    firstSpilt = new ChineseFirstSpilt();
                }            firstSpilt.GetOriginalString = str;            return firstSpilt;
            }
        }    public class test
        {
            public static void Main(String[] args)
            {
                //这里可以用读取数据的方法代替。
                string str = "姓名张三性别男年龄15姓名李四性别女年龄15";
                
                SpiltStringNew spiltString = SpiltStringFactory.CreateSpilt(str);
                ArrayList list = spiltString.FirstSpilt();            string name;
                string gender;
                int age;            foreach (object obj in list)
                {
                    //数据彻底分离
                    spiltString.SecondSpilt(obj.ToString(), out name, out gender, out age);                //打印。这里可以插入将name,gender,age,插入数据库的方法。
                    Console.WriteLine(name + " " + gender + " " + age);
                }            Console.ReadLine();
            }
        }}还有问题欢迎找我讨论。