短信内容分词(支持动态10~14位纯数字工作单号的签收信息,用在公司业务系统,很实用的算法)

前段时间接到一个需求,就是将系统接收到的短信内容进行分解,然后更新到业务系统中。

 

 

目前可支持的短信格式为:

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

 

效果图如下:

https://p-blog.csdn.net/images/p_blog_csdn_net/jato333/EntryImages/20090914/fenjie.JPG

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值