懒得勤快 2 ani în urmă
părinte
comite
c184668cbb
2 a modificat fișierele cu 39 adăugiri și 3 ștergeri
  1. 30 2
      Masuit.Tools.Abstractions/Strings/UnicodeFormater.cs
  2. 9 1
      README.md

+ 30 - 2
Masuit.Tools.Abstractions/Strings/UnicodeFormater.cs

@@ -27,6 +27,10 @@ namespace Masuit.Tools.Strings
         /// </summary>
         /// </summary>
         private readonly byte _offset;
         private readonly byte _offset;
 
 
+        private readonly bool _emojiMode;
+
+        private static readonly Regex EmojiRegex = new Regex(@"(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])");
+
         /// <summary>
         /// <summary>
         /// 数制格式化器
         /// 数制格式化器
         /// </summary>
         /// </summary>
@@ -47,9 +51,10 @@ namespace Masuit.Tools.Strings
                 throw new ArgumentException("符号集不能为空");
                 throw new ArgumentException("符号集不能为空");
             }
             }
 
 
-            var matches = Regex.Matches(characters, @"(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])");
+            var matches = EmojiRegex.Matches(characters);
             if (matches.Count > 0)
             if (matches.Count > 0)
             {
             {
+                _emojiMode = true;
                 Characters = new List<string>();
                 Characters = new List<string>();
                 foreach (Match m in matches)
                 foreach (Match m in matches)
                 {
                 {
@@ -257,9 +262,21 @@ namespace Masuit.Tools.Strings
             }
             }
 
 
             int j = 0;
             int j = 0;
+            if (_emojiMode)
+            {
+                var emoji = new List<string>();
+                foreach (Match m in EmojiRegex.Matches(str))
+                {
+                    emoji.Add(m.Value);
+                }
+
+                emoji.Reverse();
+                return emoji.Where(Characters.Contains).Sum(ch => (Characters.IndexOf(ch) + start) * (long)Math.Pow(Length, j++)) + resultOffset;
+            }
+
             var chars = str.ToCharArray();
             var chars = str.ToCharArray();
             Array.Reverse(chars);
             Array.Reverse(chars);
-            return new string(chars).Where(c => Characters.Contains(c.ToString())).Sum(ch => (Characters.IndexOf(ch.ToString()) + start) * (long)Math.Pow(Length, j++)) + resultOffset;
+            return chars.Where(c => Characters.Contains(c.ToString())).Sum(ch => (Characters.IndexOf(ch.ToString()) + start) * (long)Math.Pow(Length, j++)) + resultOffset;
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -277,6 +294,17 @@ namespace Masuit.Tools.Strings
                 resultOffset = _offset - 1;
                 resultOffset = _offset - 1;
             }
             }
             int j = 0;
             int j = 0;
+            if (_emojiMode)
+            {
+                var emoji = new List<string>();
+                foreach (Match m in EmojiRegex.Matches(str))
+                {
+                    emoji.Add(m.Value);
+                }
+                emoji.Reverse();
+                return emoji.Where(Characters.Contains).Aggregate(BigInteger.Zero, (current, c) => current + (Characters.IndexOf(c) + start) * BigInteger.Pow(Length, j++)) + resultOffset;
+            }
+
             var charArray = str.ToCharArray();
             var charArray = str.ToCharArray();
             Array.Reverse(charArray);
             Array.Reverse(charArray);
             var chars = charArray.Where(c => Characters.Contains(c.ToString()));
             var chars = charArray.Where(c => Characters.Contains(c.ToString()));

+ 9 - 1
README.md

@@ -1,4 +1,4 @@
-# Masuit.Tools(码数吐司库)
+# Masuit.Tools(码数吐司库)
 
 
 [![LICENSE](https://img.shields.io/badge/license-Anti%20996-blue.svg)](https://github.com/996icu/996.ICU/blob/master/LICENSE) [![nuget](https://img.shields.io/nuget/v/Masuit.Tools.Core.svg)](https://www.nuget.org/packages/Masuit.Tools.Core) [![nuget](https://img.shields.io/nuget/dt/Masuit.Tools.Core.svg)](https://www.nuget.org/packages/Masuit.Tools.Core) ![codeSize](https://img.shields.io/github/languages/code-size/ldqk/Masuit.Tools.svg) ![language](https://img.shields.io/github/languages/top/ldqk/Masuit.Tools.svg) `<a href="https://gitee.com/masuit/Masuit.Tools"><img src="https://gitee.com/static/images/logo-black.svg" height="24">``</a>` `<a href="https://github.com/ldqk/Masuit.Tools"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Font_Awesome_5_brands_github.svg/54px-Font_Awesome_5_brands_github.svg.png" height="24">``<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/GitHub_logo_2013.svg/128px-GitHub_logo_2013.svg.png" height="24"></a>`
 [![LICENSE](https://img.shields.io/badge/license-Anti%20996-blue.svg)](https://github.com/996icu/996.ICU/blob/master/LICENSE) [![nuget](https://img.shields.io/nuget/v/Masuit.Tools.Core.svg)](https://www.nuget.org/packages/Masuit.Tools.Core) [![nuget](https://img.shields.io/nuget/dt/Masuit.Tools.Core.svg)](https://www.nuget.org/packages/Masuit.Tools.Core) ![codeSize](https://img.shields.io/github/languages/code-size/ldqk/Masuit.Tools.svg) ![language](https://img.shields.io/github/languages/top/ldqk/Masuit.Tools.svg) `<a href="https://gitee.com/masuit/Masuit.Tools"><img src="https://gitee.com/static/images/logo-black.svg" height="24">``</a>` `<a href="https://github.com/ldqk/Masuit.Tools"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Font_Awesome_5_brands_github.svg/54px-Font_Awesome_5_brands_github.svg.png" height="24">``<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/GitHub_logo_2013.svg/128px-GitHub_logo_2013.svg.png" height="24"></a>`
 新手友好的C#万能工具库,包含一些常用的操作类,大都是静态类,加密解密,反射操作,权重随机筛选算法,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,集合扩展、Excel导出等常用封装。**诸多功能集一身,代码量不到2MB!**
 新手友好的C#万能工具库,包含一些常用的操作类,大都是静态类,加密解密,反射操作,权重随机筛选算法,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,集合扩展、Excel导出等常用封装。**诸多功能集一身,代码量不到2MB!**
@@ -191,6 +191,14 @@ Console.WriteLine(num.ToBase(12)); // 12进制:5217744842749978a756b22135b16a5
 Console.WriteLine(num.ToBase(41)); // 41进制:opzeBda2aytcEeudEquuesbk,24位长度
 Console.WriteLine(num.ToBase(41)); // 41进制:opzeBda2aytcEeudEquuesbk,24位长度
 ```
 ```
 
 
+如果你想让进制符支持emoji,NumberFormater是不支持的,不过如果你确实有这么骚的需求,我还准备了UnicodeFormater类,用于支持emoji,用法和NumberFormater一模一样,并且,UnicodeFormater的功能包含NumberFormater的功能,但是,性能比NumberFormater差了许多。
+
+```csharp
+var formater = new UnicodeFormater("😀😁😂🤣😃😄😅😆😉😊😋😎😍😘🥰😗😙🥲😚🙂🤗🤩🤔🤨😑😶😶‍🌫🙄😏😣😥😮");
+var s = formater.ToString(1234567890); // 😄🌫😶😋😋
+var num = formater.FromString(s); // 1234567890
+```
+
 ### 6.纳秒级性能计时器
 ### 6.纳秒级性能计时器
 
 
 ```csharp
 ```csharp