短信内容分词(支持动态10~14位纯数字工作单号的签收信息,用在公司业务系统,很实用的算法)
2009-09-14 18:20
423 查看
前段时间接到一个需求,就是将系统接收到的短信内容进行分解,然后更新到业务系统中。
目前可支持的短信格式为:
1. ZC 员工号 密码 (空格可有可无)
2. QS 工作单号[...] 签收人 (空格可有可无,可支持最多5个单号的短信分解)
QS 工作单号 工作单号 签收人 工作单号 签收人
QS 工作单号 工作单号 工作单号 签收人
这些内容都是手机反馈回来的数据,现要写一个程序来分解这些短信为:
ZC 员工号 密码
QS 工作单号 签收人
QS 工作单号 签收人
经过测试,核心算法及代码如下,有注释:
#region 重组短信内容方法
/// <summary>
/// 重组短信内容方法
/// </summary>
/// <param name="MsgText"></param>
/// <returns></returns>
public static string BreakMsg(string MsgText)
{
string su = "";
string Flag = "";
string NewStr = "";
//验证短信最小长度
if (MsgText.Trim().Length > 0)
{
for (int i = 0; i < MsgText.Length; i++)
{
//验证字符是否为数字
if (Char.IsNumber(MsgText, i))
{
switch (Flag)
{
case "":
{
Flag = "数字";
su = MsgText.Substring(i, 1); ;
NewStr += su;
}
break;
case "数字":
{
Flag = "数字";
su = MsgText.Substring(i, 1); ;
NewStr += su;
}
break;
case "字母":
{
Flag = "数字";
su = MsgText.Substring(i, 1); ;
NewStr += "," + su;
}
break;
}
}
else
{
switch (Flag)
{
case "":
{
Flag = "字母";
su = MsgText.Substring(i, 1); ;
NewStr += su;
}
break;
case "数字":
{
Flag = "字母";
su = MsgText.Substring(i, 1); ;
NewStr += "/" + su;
}
break;
case "字母":
{
Flag = "字母";
su = MsgText.Substring(i, 1); ;
NewStr += su;
}
break;
}
}
}
}
else
{
NewStr = MsgText;
}
return NewStr;
}
#endregion
#region 全角转换为半角
/// <summary>
/// 全角转换为半角
/// </summary>
/// <param name="strInput"></param>
/// <returns></returns>
public static string ToDBC(string strInput)
{
char[] c = strInput.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (c[i] == 12288)
{
c[i] = (char)32;
}
else if (c[i] > 65280 && c[i] < 65375)
{
c[i] = (char)(c[i] - 65248);
}
}
return new string(c);
}
#endregion
#region 半角转换为全角
/// <summary>
/// 半角转换为全角
/// </summary>
/// <param name="strInput"></param>
/// <returns></returns>
public static string ToSBC(string strInput)
{
char[] c = strInput.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (c[i] == 32)
{
c[i] = (char)12288;
}
else if (c[i] < 127)
{
c[i] = (char)(c[i] + 65248);
}
}
return new string(c);
}
#endregion
效果图如下:
http://p.blog.csdn.net/images/p_blog_csdn_net/jato333/EntryImages/20090914/fenjie.JPG
目前可支持的短信格式为:
1. ZC 员工号 密码 (空格可有可无)
2. QS 工作单号[...] 签收人 (空格可有可无,可支持最多5个单号的短信分解)
QS 工作单号 工作单号 签收人 工作单号 签收人
QS 工作单号 工作单号 工作单号 签收人
这些内容都是手机反馈回来的数据,现要写一个程序来分解这些短信为:
ZC 员工号 密码
QS 工作单号 签收人
QS 工作单号 签收人
经过测试,核心算法及代码如下,有注释:
#region 重组短信内容方法
/// <summary>
/// 重组短信内容方法
/// </summary>
/// <param name="MsgText"></param>
/// <returns></returns>
public static string BreakMsg(string MsgText)
{
string su = "";
string Flag = "";
string NewStr = "";
//验证短信最小长度
if (MsgText.Trim().Length > 0)
{
for (int i = 0; i < MsgText.Length; i++)
{
//验证字符是否为数字
if (Char.IsNumber(MsgText, i))
{
switch (Flag)
{
case "":
{
Flag = "数字";
su = MsgText.Substring(i, 1); ;
NewStr += su;
}
break;
case "数字":
{
Flag = "数字";
su = MsgText.Substring(i, 1); ;
NewStr += su;
}
break;
case "字母":
{
Flag = "数字";
su = MsgText.Substring(i, 1); ;
NewStr += "," + su;
}
break;
}
}
else
{
switch (Flag)
{
case "":
{
Flag = "字母";
su = MsgText.Substring(i, 1); ;
NewStr += su;
}
break;
case "数字":
{
Flag = "字母";
su = MsgText.Substring(i, 1); ;
NewStr += "/" + su;
}
break;
case "字母":
{
Flag = "字母";
su = MsgText.Substring(i, 1); ;
NewStr += su;
}
break;
}
}
}
}
else
{
NewStr = MsgText;
}
return NewStr;
}
#endregion
#region 全角转换为半角
/// <summary>
/// 全角转换为半角
/// </summary>
/// <param name="strInput"></param>
/// <returns></returns>
public static string ToDBC(string strInput)
{
char[] c = strInput.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (c[i] == 12288)
{
c[i] = (char)32;
}
else if (c[i] > 65280 && c[i] < 65375)
{
c[i] = (char)(c[i] - 65248);
}
}
return new string(c);
}
#endregion
#region 半角转换为全角
/// <summary>
/// 半角转换为全角
/// </summary>
/// <param name="strInput"></param>
/// <returns></returns>
public static string ToSBC(string strInput)
{
char[] c = strInput.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (c[i] == 32)
{
c[i] = (char)12288;
}
else if (c[i] < 127)
{
c[i] = (char)(c[i] + 65248);
}
}
return new string(c);
}
#endregion
效果图如下:
http://p.blog.csdn.net/images/p_blog_csdn_net/jato333/EntryImages/20090914/fenjie.JPG
相关文章推荐
- 商业智能系统--公司业务、系统执行统计数据和分析
- C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 角色成员功能的改进支持公司加入到角色
- 对于不返回任何键列信息的 selectcommand 不支持 updatecommand 的动态 sql 生成
- 易普优APS高级计划排程系统系列提纲:行业知识,业务建模,排程算法,计划可视化,平台框架,案例分享
- [Android 数据库] android手机获取系统短信sqlite数据库并查看内容
- 跳转到系统短信界面和预设短信内容
- 情境感知(上下文信息)推荐系统---《推荐系统技术、评估及高效算法》---读书笔记(7)
- atitit.短信 验证码 破解 v3 p34 识别 绕过 系统方案规划----业务相关方案 手机验证码 .doc
- 系统启动时,数据动态加载业务若干思考
- javascript验证内容为数字以及长度为10
- 公司的费用报销系统【为什么不好用】?做业务系统软件的可以参考一下
- 我公司研制开发的“无线电设备信息RFID管理系统”成功应用
- 程序员面试题精选100题(10)-排序数组中和为给定值的两个数字[算法]
- 绿坝系统提醒你,以下内容含不良信息
- c#“对于不返回任何基表信息的 SelectCommand 不支持动态 SQL 生成”错误的解决
- 下一代信息推荐系统的算法设计与性能评估
- We7CMS内容管理系统助阵政府完善信息公开制度
- 【广告算法工程师入门 10】机制设计-不完全信息博弈与拍卖
- 无废话Android之内容观察者ContentObserver、获取和保存系统的联系人信息、网络图片查看器、网络html查看器、使用异步框架Android-Async-Http(4)
- 程序员面试题精选100题(10)-排序数组中和为给定值的两个数字[算法]