zoukankan      html  css  js  c++  java
  • 文本帮助类

    #region << 版 本 注 释 >>
    /****************************************************
    * 文 件 名:RegExpHelper
    * Copyright(c) www.ITdos.com
    * CLR 版本: 4.0.30319.17929
    * 创 建 人:ITdos
    * 电子邮箱:admin@itdos.com
    * 创建日期:2016/05/04 23:11:36
    * 文件描述:
    ******************************************************
    * 修 改 人:
    * 修改日期:
    * 备注描述:
    *******************************************************/
    #endregion
    
    using System;
    using System.Text;
    
    namespace GT.Common.Helper
    {
        /// <summary>
        /// 字符串帮助类
        /// </summary>
        public class StringHelper
        {
            /// <summary>
            /// 获取字节数
            /// str:需要获取的字符串
            /// </summary>
            public static int Length(string str)
            {
                if (string.IsNullOrWhiteSpace(str))
                {
                    return 0;
                }
                var j = 0;
                var ce = str.GetEnumerator();
                while (ce.MoveNext())
                {
                    j += (ce.Current > 0 && ce.Current < 255) ? 1 : 2;
                }
                return j;
            }
            /// <summary>
            /// 按字节数截取指定字节
            /// </summary>
            /// <Param name="str">需要获取的字符串</Param>
            /// <Param name="length">获取的字节长度</Param>
            /// <returns></returns>
            public static string SubString(string str, int length)
            {
                var result = str;
                int j = 0, k = 0;
                var ce = str.GetEnumerator();
                while (ce.MoveNext())
                {
                    j += (ce.Current > 0 && ce.Current < 255) ? 1 : 2;
    
                    if (j <= length)
                    {
                        k++;
                    }
                    else
                    {
                        result = str.Substring(0, k);
                        break;
                    }
                }
                return result;
            }
            #region 取首字母
            /// <summary>
            /// 获取汉字首字母(可包含多个汉字)
            /// </summary>
            /// <Param name="strText"></Param>
            /// <returns></returns>
            public static string GetChineseSpell(string strText)
            {
                int len = strText.Length;
                string myStr = "";
                for (int i = 0; i < len; i++)
                {
                    myStr += GetSpell(strText.Substring(i, 1));
                }
                return myStr;
            }
    
            public static string GetSpell(string cnChar)
            {
                var arrCn = Encoding.Default.GetBytes(cnChar);
                if (arrCn.Length > 1)
                {
                    int area = (short)arrCn[0];
                    int pos = (short)arrCn[1];
                    int code = (area << 8) + pos;
                    int[] areacode = { 45217, 45253, 45761, 46318, 46826, 47010, 47297, 47614, 48119, 48119, 49062, 49324, 49896, 50371, 50614, 50622, 50906, 51387, 51446, 52218, 52698, 52698, 52698, 52980, 53689, 54481 };
                    for (int i = 0; i < 26; i++)
                    {
                        int max = 55290;
                        if (i != 25) max = areacode[i + 1];
                        if (areacode[i] <= code && code < max)
                        {
                            return Encoding.Default.GetString(new byte[] { (byte)(65 + i) });
                        }
                    }
                    return "*";
                }
                return cnChar;
            }
    
            /// <summary>
            /// 获取第一个汉字的首字母,只能输入汉字
            /// </summary>
            /// <Param name="c"></Param>
            /// <returns></returns>
            public static string GetInitial(string c)
            {
                byte[] array = new byte[2];
                array = System.Text.Encoding.Default.GetBytes(c);
                int i = (short)(array[0] - '') * 256 + ((short)(array[1] - ''));
                if (i < 0xB0A1) return "*";
                if (i < 0xB0C5) return "A";
                if (i < 0xB2C1) return "B";
                if (i < 0xB4EE) return "C";
                if (i < 0xB6EA) return "D";
                if (i < 0xB7A2) return "E";
                if (i < 0xB8C1) return "F";
                if (i < 0xB9FE) return "G";
                if (i < 0xBBF7) return "H";
                if (i < 0xBFA6) return "J";
                if (i < 0xC0AC) return "K";
                if (i < 0xC2E8) return "L";
                if (i < 0xC4C3) return "M";
                if (i < 0xC5B6) return "N";
                if (i < 0xC5BE) return "O";
                if (i < 0xC6DA) return "P";
                if (i < 0xC8BB) return "Q";
                if (i < 0xC8F6) return "R";
                if (i < 0xCBFA) return "S";
                if (i < 0xCDDA) return "T";
                if (i < 0xCEF4) return "W";
                if (i < 0xD1B9) return "X";
                if (i < 0xD4D1) return "Y";
                if (i < 0xD7FA) return "Z";
                return "*";
            }
            #endregion
            #region 计算匹配率/相似度
            /// <summary>
            /// 计算相似度。
            /// </summary>
            public static SimilarityResult SimilarityRate(string str1, string str2)
            {
                var result = new SimilarityResult();
                var arrChar1 = str1.ToCharArray();
                var arrChar2 = str2.ToCharArray();
                var computeTimes = 0;
                var row = arrChar1.Length + 1;
                var column = arrChar2.Length + 1;
                var matrix = new int[row, column];
                //开始时间
                var beginTime = DateTime.Now;
                //初始化矩阵的第一行和第一列
                for (var i = 0; i < column; i++)
                {
                    matrix[0, i] = i;
                }
                for (var i = 0; i < row; i++)
                {
                    matrix[i, 0] = i;
                }
                for (var i = 1; i < row; i++)
                {
                    for (var j = 1; j < column; j++)
                    {
                        var intCost = 0;
                        intCost = arrChar1[i - 1] == arrChar2[j - 1] ? 0 : 1;
                        //关键步骤,计算当前位置值为左边+1、上面+1、左上角+intCost中的最小值 
                        //循环遍历到最后_Matrix[_Row - 1, _Column - 1]即为两个字符串的距离
                        matrix[i, j] = Minimum(matrix[i - 1, j] + 1, matrix[i, j - 1] + 1, matrix[i - 1, j - 1] + intCost);
                        computeTimes++;
                    }
                }
                //结束时间
                var endTime = DateTime.Now;
                //相似率 移动次数小于最长的字符串长度的20%算同一题
                var intLength = row > column ? row : column;
                //_Result.Rate = (1 - (double)_Matrix[_Row - 1, _Column - 1] / intLength).ToString().Substring(0, 6);
                result.Rate = (1 - (double)matrix[row - 1, column - 1] / (intLength - 1));
                result.ExeTime = (endTime - beginTime).TotalMilliseconds;
                result.ComputeTimes = computeTimes.ToString() + " 距离为:" + matrix[row - 1, column - 1].ToString();
                return result;
            }
            /// <summary>
            /// 取三个数中的最小值
            /// </summary>
            public static int Minimum(int first, int second, int third)
            {
                var intMin = first;
                if (second < intMin)
                {
                    intMin = second;
                }
                if (third < intMin)
                {
                    intMin = third;
                }
                return intMin;
            }
            /// <summary>
            /// 计算结果
            /// </summary>
            public struct SimilarityResult
            {
                /// <summary>
                /// 相似度,0.54即54%。
                /// </summary>
                public double Rate;
                /// <summary>
                /// 对比次数
                /// </summary>
                public string ComputeTimes;
                /// <summary>
                /// 执行时间,毫秒
                /// </summary>
                public double ExeTime;
            }
            #endregion
        }
    }
    萌橙 你瞅啥?
  • 相关阅读:
    Python--day62--什么时候用GET请求和POST请求
    Python--day62--ORM的使用
    使用 vs code 搭建vue项目(一)
    jquery如何模拟分页-小白进阶
    JavaScript 实现的4种数字千位符格式化方法
    web秀
    五十个UI设计资源网站
    基于 HTML5 WebGL 的 水泥工厂可视化系统
    ASP.NET MVC图片管理(上传,预览与显示)
    jQuery使用FormData上传文件
  • 原文地址:https://www.cnblogs.com/daimaxuejia/p/11446124.html
Copyright © 2011-2022 走看看