按照特定的格式分割字符串后就可以存库了 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; }
代码有些丑,不过测试过,能用。 至于怎么插入数据库,不知道楼主用的是什么数据,数据库属性是什么,就不做那一步了,想要具体插入数据库的方法,可以找我。 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();
{
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;
}
至于怎么插入数据库,不知道楼主用的是什么数据,数据库属性是什么,就不做那一步了,想要具体插入数据库的方法,可以找我。
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();
}
}
}
string b=a.Replace("姓名","\r\n");
b=b.Replace("性别"," ");
b=b.Replace("年龄"," ");
this.label1.Text=b;
this.textBox1.Text=b;
string b=a.Replace("姓名","\r\n");
b=b.Replace("性别","\t");
b=b.Replace("年龄","\t");
this.label1.Text=b;
this.textBox1.Text=b;
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标签进行信息的输出,经过测试,能够实现功能!
在给我的短信中,问道了“张三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();
}
}}还有问题欢迎找我讨论。