zoukankan      html  css  js  c++  java
  • c# 字符串工具类

    using System;
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using System.Globalization;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Web;
    
    namespace HuaTong.General.Utility
    {
        /// <summary>
        /// 字符串工具类
        /// </summary>
        public static class StringHelper
        {
            /// <summary>
            /// 获取客户端IP地址
            /// </summary>
            /// <returns></returns>
            public static string GetClientIp()
            {
                if (HttpContext.Current == null)
                {
                    return string.Empty;
                }
                //可以透过代理服务器
                string userIP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                //判断是否有代理服务器
                if (string.IsNullOrEmpty(userIP))
                {
                    //没有代理服务器,如果有代理服务器获取的是代理服务器的IP
                    userIP = HttpContext.Current.Request.UserHostAddress;
                }
                return userIP;
            }
    
    
            /// <summary>
            /// 获取字符串 不返回null值
            /// </summary>
            public static string[] SplitArr(object value, char[] split = null,
                        StringSplitOptions option = StringSplitOptions.RemoveEmptyEntries)
            {
                var strValue = ToString(value);
                if (split == null) split = new char[] { ',' };
    
                return strValue.Split(split, option);
            }
    
            /// <summary>
            /// 获取字符串 不返回null值
            /// </summary>
            public static string ToString(object value)
            {
                if (value == null || value == DBNull.Value)
                {
                    return string.Empty;
                }
                return value.ToString();
            }
    
            /// <summary>
            /// 过滤Sql查询关键词中的敏感词汇
            /// </summary>
            public static string SqlFilter(string value)
            {
                if (string.IsNullOrEmpty(value))
                {
                    return "";
                }
                Regex regsql = new Regex(@"0x([0-9a-fA-F]{4})+|(%[0-9a-fA-F]{2})+|--|@@|count|asc|mid|char|chr|sysobjects|sys.|select|insert|delete|update|drop|truncate|xp_cmdshell|netlocalgroup|administrator|net user|exec|master|declare|localgroup|remove|create|extended_properties|objects|columns|types|extended|comments|table|cast", RegexOptions.IgnoreCase);
    
                value = value.Replace("'", "''").Trim();
                //捕获的字符转换为""
                return regsql.Replace(value, delegate (Match m)
                {
                    return string.Empty;
                });
            }
    
            /// <summary>
            /// 根据时间返回几个月前,几天前,几小时前,几分钟前,几秒前
            /// </summary>
            /// <returns></returns>
            public static string DateBeforeNow(DateTime date)
            {
                TimeSpan span = DateTime.Now - date;
                if (span.TotalDays > 60)
                {
                    return date.ToShortDateString();
                }
                else if (span.TotalDays > 30)
                {
                    return "1个月前";
                }
                else if (span.TotalDays > 14)
                {
                    return "2周前";
                }
                else if (span.TotalDays > 7)
                {
                    return "1周前";
                }
                else if (span.TotalDays > 1)
                {
                    return string.Format("{0}天前", (int)Math.Floor(span.TotalDays));
                }
                else if (span.TotalHours > 1)
                {
                    return string.Format("{0}小时前", (int)Math.Floor(span.TotalHours));
                }
                else if (span.TotalMinutes > 1)
                {
                    return string.Format("{0}分钟前", (int)Math.Floor(span.TotalMinutes));
                }
                else if (span.TotalSeconds >= 1)
                {
                    return string.Format("{0}秒前", (int)Math.Floor(span.TotalSeconds));
                }
                else
                {
                    return "1秒前";
                }
            }
            /// <summary>
            /// 根据出生年月进行生日提醒
            /// </summary>
            /// <returns></returns>
            public static string BirthdayMessage(DateTime date)
            {
                DateTime now = DateTime.Now;
                //TimeSpan span = DateTime.Now - birthday;
                int nowMonth = now.Month;
                int birtMonth = date.Month;
                if (nowMonth == 12 && birtMonth == 1)
                    return string.Format("下月{0}号", date.Day);
                if (nowMonth == 1 && birtMonth == 12)
                    return string.Format("上月{0}号", date.Day);
                int months = now.Month - date.Month;
                //int days = now.Day - birthday.Day;
                if (months == 1)
                    return string.Format("上月{0}号", date.Day);
                else if (months == -1)
                    return string.Format("下月{0}号", date.Day);
                else if (months == 0)
                {
                    if (now.Day == date.Day)
                        return "今天";
                    return string.Format("本月{0}号", date.Day);
                }
                else if (months > 1)
                    return string.Format("已过{0}月", months);
                else
                    return string.Format("{0}月{1}日", date.Month, date.Day);
            }
    
    
            /// <summary>
            /// 获取字符串的拆分结果
            /// </summary>
            public static string[] Split(string value, string split)
            {
                return value.Split(split.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            }
            /// <summary>
            /// 获取字符串的拆分结果
            /// </summary>
            public static string[] Split(string value, params string[] split)
            {
                return value.Split(split, StringSplitOptions.RemoveEmptyEntries);
            }
    
            /// <summary>
            /// 获取左边指定位数的字符串
            /// </summary>
            public static string SplitLeft(string value, int length)
            {
                if (string.IsNullOrEmpty(value))
                {
                    return "";
                }
                if (value.Length <= length)
                {
                    return value;
                }
    
                return value.Substring(0, length);
            }
            /// <summary>
            /// 获取左边指定位数的字符串
            /// </summary>
            public static string SplitRight(string value, int length)
            {
                if (string.IsNullOrEmpty(value))
                {
                    return "";
                }
                if (value.Length <= length)
                {
                    return value;
                }
    
                return value.Substring(value.Length - length);
            }
    
            /// <summary>
            /// 获取拆分符左边的字符串
            /// </summary>
            public static string SplitLeft(string value, string split)
            {
                if (string.IsNullOrEmpty(value))
                {
                    return "";
                }
                int index = value.IndexOf(split);
                if (index > 0)
                {
                    return value.Substring(0, index);
                }
                else
                {
                    return value;
                }
            }
            /// <summary>
            /// 获取拆分符右边的字符串
            /// </summary>
            public static string SplitRight(string value, string split)
            {
                if (string.IsNullOrEmpty(value))
                {
                    return "";
                }
                int index = value.IndexOf(split);
                if (index > 0)
                {
                    return value.Substring(index + split.Length);
                }
                else
                {
                    return value;
                }
            }
    
            /// <summary>
            /// 删除不可见字符
            /// </summary>
            public static string RemoveEmpty(string value)
            {
                if (string.IsNullOrEmpty(value))
                {
                    return "";
                }
                Regex reg = new Regex(@"[f
    
    	v]*", RegexOptions.IgnoreCase);
                value = reg.Replace(value, "");
                reg = new Regex(@"[ ]+");//合并多个空格为一个
                return reg.Replace(value, " ");
            }
    
            /// <summary>
            /// 过滤文本中的空行
            /// </summary>
            public static string RemoveEmptyRow(string value)
            {
                if (string.IsNullOrEmpty(value))
                {
                    return "";
                }
                Regex reg = new Regex(@"
    [	|s| ]*
    ", RegexOptions.IgnoreCase);
                return reg.Replace(value, "");
            }
    
            /// <summary>
            ///    获取字符串在数组中累计出现的次数
            /// </summary>
            public static int GetStringCount(string[] stringArray, string findString)
            {
                string totalString = string.Join("", stringArray);
                return GetStringCount(totalString, findString);
            }
    
            /// <summary>
            /// 获取字符串在字符串累计出现的次数
            /// </summary>
            public static int GetStringCount(string value, string findString)
            {
                if (string.IsNullOrEmpty(value))
                {
                    return 0;
                }
                int count = 0;
                int findStringLength = findString.Length;
                string subString = value;
    
                while (subString.IndexOf(findString) >= 0)
                {
                    subString = subString.Substring(subString.IndexOf(findString) + findStringLength);
                    count += 1;
                }
                return count;
            }
    
            /// <summary>
            /// 截取从startString开始到结尾的字符   
            /// </summary>
            public static string GetSubString(string value, string startString)
            {
                if (string.IsNullOrEmpty(value))
                {
                    return "";
                }
                int index = value.IndexOf(startString);
                if (index == -1) return "";
                index += startString.Length;
                if (index > 0)
                {
                    return value.Substring(index);
                }
                else
                {
                    return "";
                }
            }
            /// <summary>
            /// 截取从startString开始到endString的字符   
            /// </summary>
            public static string GetSubString(string value, string startString, string endString)
            {
                value = GetSubString(value, startString);
                if (string.IsNullOrEmpty(value))
                {
                    return "";
                }
    
                int length = value.IndexOf(endString);
                if (length > 0)
                {
                    return value.Substring(0, length);
                }
                else
                {
                    return "";
                }
            }
    
            /// <summary>
            /// 按日期时间生成新文件名
            /// </summary>
            public static string BuildFileNameByDate(string fileName)
            {
                if (string.IsNullOrEmpty(fileName))
                {
                    return "";
                }
                return DateTime.Now.ToString("yyyyMMdd-") + DateTime.Now.Ticks
                    + System.IO.Path.GetExtension(fileName); ;
            }
    
            /// <summary>
            /// 将字符串按指定长度截断
            /// </summary>
            public static string CutString(string value, int len, string endWith)
            {
                if (string.IsNullOrEmpty(value))
                {
                    return "";
                }
                if (len >= value.Length)
                {
                    return value;
                }
                return value.Substring(0, len) + endWith;
            }
    
            /// <summary>
            /// 将字符串按指定长度截断
            /// </summary>
            public static string CutString(string value, int len)
            {
                return CutString(value, len, "");
            }
    
            /// <summary>
            /// 数制转换
            /// </summary>
            public static string ConvertNumeric(string numeric, int fromBase, int toBase)
            {
                if (string.IsNullOrEmpty(numeric) || !StringValidate.IsNumeric(numeric))
                {
                    return "0";
                }
                long newvalue = Convert.ToInt64(numeric, fromBase);
                return Convert.ToString(newvalue, toBase);
            }
    
            /// <summary>
            /// 浮点数字格式化
            /// </summary>
            public static string FormatFloat(string numeric)
            {
                return FormatFloat(numeric, 2);
            }
            /// <summary>
            /// 浮点数字格式化
            /// </summary>
            public static string FormatFloat(string numeric, int decLen)
            {
                return FormatFloat(numeric, decLen, false);
            }
            /// <summary>
            /// 浮点数字格式化,alwaysCarry为true时指定decLen之后有数即进位
            /// 例:decLen=2 1.023结果为1.03
            /// </summary>
            public static string FormatFloat(string numeric, int decLen, bool alwaysCarry)
            {
                if (string.IsNullOrEmpty(numeric) || !StringValidate.IsDecimalSign(numeric))
                {
                    return "0";
                }
                double d = double.Parse(numeric);
                string temp = "";
    
                if (alwaysCarry)
                {
                    string zero = "";
                    for (int i = 0; i < decLen; i++) zero += "0";
                    temp = string.Format("{0:F" + decLen + "}",
                        Math.Round(d + double.Parse(string.Format("0.{0}5", zero)),
                        decLen, MidpointRounding.AwayFromZero));
                }
                else
                {
                    temp = string.Format("{0:F" + decLen + "}", d);
                }
                return temp;
            }
    
            /// <summary>
            /// 查找两个字符串最长的公共子串(LongestCommonSequence)
            /// </summary>
            public static string LCS(string value1, string value2)
            {
                if (string.IsNullOrEmpty(value1)
                    || string.IsNullOrEmpty(value2))
                {
                    return "";
                }
                int[,] d = new int[value1.Length, value2.Length];
                int index = 0;
                int length = 0;
    
                for (int i = 0; i < value1.Length; i++)
                {
                    for (int j = 0; j < value2.Length; j++)
                    {
                        // 左上角值
                        int n = i - 1 >= 0 && j - 1 >= 0 ? d[i - 1, j - 1] : 0;
                        // 当前节点值 = "1 + 左上角值" : "0"
                        d[i, j] = value1[i] == value2[j] ? 1 + n : 0;
                        // 如果是最大值,则记录该值和行号
                        if (d[i, j] > length)
                        {
                            length = d[i, j];
                            index = i;
                        }
                    }
                }
                return value1.Substring(index - length + 1, length);
            }
    
            /// <summary>
            /// 两字符串相似度计算方法(编辑距离算法LevenshteinDistance又称EditDistance)
            /// </summary>
            public static string LD(string value1, string value2)
            {
                if (string.IsNullOrEmpty(value1)
                    || string.IsNullOrEmpty(value2))
                {
                    return "0";
                }
    
    
                int n = value1.Length;
                int m = value2.Length;
                int[,] d = new int[n + 1, m + 1];
    
                int temp = 0;
                char ch1, ch2;
                int i = 0, j = 0;
    
                for (i = 0; i <= n; i++)
                {
                    //初始化第一列
                    d[i, 0] = i;
                }
                for (j = 0; j <= m; j++)
                {
                    //初始化第一行
                    d[0, j] = j;
                }
    
                for (i = 1; i <= n; i++)
                {
                    ch1 = value1[i - 1];
                    for (j = 1; j <= m; j++)
                    {
                        ch2 = value2[j - 1];
                        if (ch1==ch2)
                        {
                            temp = 0;
                        }
                        else
                        {
                            temp = 1;
                        }
                        //对比获取最小值
                        int min = 0, first = d[i - 1, j] + 1, second = d[i, j - 1] + 1, third = d[i - 1, j - 1] + temp;
                        min = first < second ? first : second;
                        min = min < third ? min : third;
    
                        d[i, j] = min;
                    }
                }
    
                //输出百分比 保留两位小数
                int maxLenth = value1.Length > value2.Length ? value1.Length : value2.Length;
                decimal percent = (1 - (decimal)d[n, m] / maxLenth) * 100;
                return string.Format("{0:F2}%", percent).Replace(".00", "");
            }
    
    
            /// <summary>
            /// 中文繁体转中文简体
            /// </summary>
            public static string TradToSimp(string value)
            {
                if (string.IsNullOrEmpty(value))
                {
                    return "";
                }
                string temp = Microsoft.VisualBasic.Strings.StrConv(value, Microsoft.VisualBasic.VbStrConv.TraditionalChinese, 0);
                return temp;
            }
            /// <summary>
            /// 中文简体转中文繁体
            /// </summary>
            public static string SimpToTrad(string value)
            {
                if (string.IsNullOrEmpty(value))
                {
                    return "";
                }
                string temp = Microsoft.VisualBasic.Strings.StrConv(value, Microsoft.VisualBasic.VbStrConv.SimplifiedChinese, 0);
                return temp;
            }
    
            /// <summary>
            /// 对指定串进行正则替换
            /// </summary>
            /// <returns></returns>
            public static string Replace(string value, string pattern, string replace)
            {
                if (string.IsNullOrEmpty(value)) return "";
                return Regex.Replace(value, pattern, replace, RegexOptions.IgnoreCase);
            }
    
            /// <summary>
            /// 对指定字符串计算其长度
            /// </summary>
            /// <returns></returns>
            public static int Length(string value, bool isDistinguishFull)
            {
                int len = 0;
                if (string.IsNullOrEmpty(value)) return len;
                //除去两侧无效空格符
                value = Replace(value, @"(^s*)|(s*$)", "");
                if (isDistinguishFull == true)
                {
                    ASCIIEncoding ascii = new ASCIIEncoding();
                    byte[] s = ascii.GetBytes(value);
                    for (int i = 0; i < s.Length; i++)
                    {
                        if ((int)s[i] == 63) len += 2;
                        else len += 1;
                    }
                }
                else
                {
                    len = value.Length;
                }
                return len;
            }
    
            /// <summary>
            /// 将指定字符串简单分拆为NameValueCollection
            /// </summary>
            /// <returns></returns>
            public static NameValueCollection TakeNameValueCollection(string value, Encoding encoding = null)
            {
                if (encoding == null)
                {
                    encoding = Encoding.UTF8;
                }
                var coll = HttpUtility.ParseQueryString(value, encoding);
    
                return coll;
            }
    
            /// <summary>
            /// 对比字符串是否相等,默认忽略大小写
            /// </summary>
            /// <returns></returns>
            public static bool IsEqualString(string value1, string value2, bool ignoreLower = true)
            {
                return string.Equals(value1, value2,
                    ignoreLower ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
            }
        }
    }
  • 相关阅读:
    Taro文件上传:Blob Url下载Blob对象本身并通过接口上传到服务器
    Taro项目遇到的问题
    RPC是什么?
    句柄
    正向代理和反向代理
    Go Micro搭建简单微服务
    gRPC奇怪的编译命令protoc
    官网下载Git方法
    Go/golang:解决依赖包模块安装问题
    URL
  • 原文地址:https://www.cnblogs.com/password1/p/5870775.html
Copyright © 2011-2022 走看看