/// <summary> /// 比较两个json结构是否相同 /// </summary> /// <param name="json_1"></param> /// <param name="json_2"></param> /// <returns></returns> public static bool HasSameStructure(string json_1, string json_2) { var path_list = new List <string>(); void FindJsonNode(JToken token) { if (token == null) { return; } if (token.Type == JTokenType.Property) { path_list.Add(token.Path); } //find next node var children = token.Children(); foreach (var child in children) { FindJsonNode(child); } } FindJsonNode(JToken.Parse(json_1)); FindJsonNode(JToken.Parse(json_2)); path_list = path_list.Select(x => ConvertHelper.GetString(x).Trim()).ToList(); //这里其实有bug //如果一个json是空,另一个是两个a.b.c(虽然不可能出现) //就会导致两个不一样的json被判断为一样 //介于不太可能发生,就不想改了,什么时候c#内置函数支持ref再改(强迫症=.=) return(path_list.Count == path_list.Distinct().Count() * 2); }
/// <summary> /// 截取字符串 /// </summary> public static string SubString(string str, int startIndex, int length) { str = ConvertHelper.GetString(str); if (str.Length > (startIndex + length)) { return(str.Substring(startIndex, length)); } return(str); }
/* * string username = "******"; * byte[] buffer = System.Text.Encoding.UTF8.GetBytes(username); //这是把字符串转成字节数组 * Console.WriteLine(System.Text.Encoding.UTF8.GetString(buffer)); //这是把字节数组再转回到字符串 * * Console.WriteLine(BitConverter.ToString(buffer)); // 这是把字节数组当作字符串输出(长度较长) * Console.WriteLine(Convert.ToBase64String(buffer)); //这是把字节数组当作一种所谓的Base64的字符串格式输出 */ public static string GetByteString(string str, Encoding encode = null) { if (encode == null) { encode = Encoding.UTF8; } byte[] b = encode.GetBytes(ConvertHelper.GetString(str)); return(BitConverter.ToString(b)); }
/// <summary> /// 字典变url格式(a=1&b=3) /// </summary> public static string DictToUrlParams(Dictionary <string, string> data) { if (!ValidateHelper.IsPlumpDict(data)) { return(string.Empty); } var arr = data.Keys.Select(x => $"{x}={ConvertHelper.GetString(data[x])}"); return(string.Join("&", arr)); }
/// <summary> /// 提取文本中@对象 @用户 /// http://blog.csdn.net/hfut_jf/article/details/49745701 /// </summary> /// <param name="str"></param> /// <returns></returns> public static List <string> FindAtFromStr(string str) { var matchs = RegexHelper.FindMatchs(ConvertHelper.GetString(str), "@[\u4e00-\u9fa5a-zA-Z0-9_-]{2,30}"); var list = matchs?.Where(x => x.Success).Select(x => x.Value).Distinct().ToList(); if (list == null) { list = new List <string>(); } return(list); }
/// <summary> /// 提取文本中的话题,格式:#话题# /// http://blog.csdn.net/hfut_jf/article/details/49745701 /// </summary> /// <param name="str"></param> /// <returns></returns> public static List <string> FindTagsFromStr(string str) { var matchs = RegexHelper.FindMatchs(ConvertHelper.GetString(str), "#[^#]+#"); var list = matchs?.Where(x => x.Success).Select(x => x.Value).Distinct().ToList(); if (list == null) { list = new List <string>(); } return(list); }
/// <summary> /// 移除后导字符串 /// </summary> public static string TrimEnd(string str, string trimStr, bool ignoreCase = true) { str = ConvertHelper.GetString(str); trimStr = ConvertHelper.GetString(trimStr); while (str.EndsWith(trimStr, ignoreCase, CultureInfo.CurrentCulture)) { str = str.Substring(0, str.Length - trimStr.Length); } return(str); }
/// <summary> /// 移除前导字符串 /// </summary> public static string TrimStart(string str, string trimStr, bool ignoreCase = true) { str = ConvertHelper.GetString(str); trimStr = ConvertHelper.GetString(trimStr); while (str.StartsWith(trimStr, ignoreCase, CultureInfo.CurrentCulture)) { str = str.Remove(0, trimStr.Length); } return(str); }
/// <summary> /// 是否是图片 /// </summary> /// <param name="urlOrPathOrName"></param> /// <returns></returns> public static bool IsImage(string urlOrPathOrName) { urlOrPathOrName = ConvertHelper.GetString(urlOrPathOrName).Trim().ToLower(); foreach (var ext in ImageExtesions) { if (urlOrPathOrName.EndsWith(ext)) { return(true); } } return(false); }
/// <summary> /// join 不会返回空 /// </summary> public static string Join(string spliter, IList <string> list) { string str = string.Empty; if (!ValidateHelper.IsPlumpList(list)) { return(str); } list.ToList().ForEach(delegate(string s) { s = ConvertHelper.GetString(s); str += ((str == string.Empty) ? string.Empty : spliter) + s; }); return(str); }
/// <summary> /// 格式化数字格式 /// </summary> /// <param name="num"></param> /// <returns></returns> public static string FormatNumber(string num) { var sp = ConvertHelper.GetString(num).Split('.'); if (sp.Length != 2) { return(num); } var right = ConvertHelper.GetString(sp[1]); right = right.TrimEnd('0'); var left = sp[0]; if (ValidateHelper.IsPlumpString(right)) { left += "." + right; } return(left); }
/// <summary> /// 可能返回空 /// </summary> /// <param name="str"></param> /// <param name="spliter"></param> /// <returns></returns> public static List <string> Split(string str, params char[] spliter) { return(ConvertHelper.GetString(str).Split(spliter).ToList()); }
/// <summary> /// 把对象可读属性读出来变成字典 /// </summary> /// <param name="data"></param> /// <returns></returns> public static Dictionary <string, string> ObjectToStringDict(object data) { return(ObjectToDict_(data).ToDictionary(x => x.Key, x => ConvertHelper.GetString(x.Value))); }
/// <summary> /// 获取字符前几位,并加省略号 /// </summary> /// <param name="str"></param> /// <param name="len"></param> /// <returns></returns> public static string GetPreviewString(string str, int len) { str = ConvertHelper.GetString(str); return((str.Length <= len) ? str : str.Substring(0, len) + "..."); }