技术经验分享:c#拆分字符串英文和数字(包括国外所以文字)

简介: 技术经验分享:c#拆分字符串英文和数字(包括国外所以文字)

"

先创建一个类:

///

/// 字符串分析

///

interface IStringAna

{

///

/// key:文本包含的汉字或英文单词,value:汉字或英文单词出现的次数

///

///

/// //代码效果参考:https://v.youku.com/v_show/id_XNjQwNjg1MjE0MA==.html

key:文本包含的汉字或英文单词,value:汉字或英文单词出现的次数

Dictionary[span style=""color: rgba(0, 0, 255, 1)"">string, int

}

class StringAna : IStringAna

{

public Dictionary[span style=""color: rgba(0, 0, 255, 1)"">string, int

{

var words = new Listspan style=""color: rgba(0, 0, 255, 1)"">string</span;

var dict = new Dictionaryspan style=""color: rgba(0, 0, 255, 1)"">string, int</span;

byte【】 bts = Encoding.Unicode.GetBytes(text);

//foreach (var bt in bts)

//{

// //代码效果参考:https://v.youku.com/v_show/id_XNjQwMDM5NzIyMA==.html

Console.Write(string.Format(""{0} "",bt));

//}

//Console.WriteLine();

var pointer = 0;

var i = 0;

while (i <= bts.Length-2)

{

byte【】 tmp;

if (bts【i + 1】 == 0 && bts【i】 != 32)

{

pointer = i;

while (pointer + 2 < bts.Length && bts【pointer +2】 != 32 && bts【pointer + 2+1】 == 0)

{

pointer += 2;

}

var len = pointer+2 - i;

tmp = new byte【len】;

Array.Copy(bts, i, tmp, 0, len);

i = pointer+2;

}

else if (bts【i】 == 32 && bts【i + 1】 == 0)

{

i += 2;

continue;

}

else

{

tmp = new byte【】 { bts【i】, bts【i + 1】 };

i += 2;

}

var word = Bytes2Word(tmp);

words.Add(word);

Put(dict, Bytes2Word(tmp));

}

return dict;

}

string Bytes2Word(byte【】 bytes)

{

return Encoding.Unicode.GetString(bytes);

}

void Put(Dictionary[span style=""color: rgba(0, 0, 255, 1)"">string,int

{

int value;

if(dict.TryGetValue(word,out value))

{

dict【word】 = value + 1;

}

else

{

dict【word】 = 1;

}

}

}

实现接口:

var text = GetTestText();//生成测试文本

Console.WriteLine(text);

IStringAna ana = new StringAna();

var sp = Stopwatch.StartNew();

var rlt = ana.Ana(text);

Console.WriteLine($""Elapsed:{sp.ElapsedTicks}"");

if (rlt == null)

{

Console.WriteLine(""error"");

}

else

{

foreach(var item in rlt)

{

Console.WriteLine($""{item.Key}:{item.Value}"");

}


"
image.png
相关文章
|
4月前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
116 8
|
9天前
|
Web App开发 Linux C#
C# 网页截图全攻略:三种技术与 Chrome 路径查找指南
本文主要介绍了在 C# 中实现网页截图的几种技术及相关要点。涵盖了 PuppeteerSharp、Selenium 和 HtmlToImage 三种方式,分别阐述了它们的安装步骤及核心代码。同时,针对在 C# 中寻找 Windows 上 chrome.exe 路径这一问题,分析了未安装 Google Chrome 和已安装两种情况下的查找原因,并给出了相关参考链接,还列举了一系列与 C# 使用 Selenium、获取 chrome.exe 路径以及在 Linux 上部署相关的参考资料。
36 11
|
5月前
|
开发框架 .NET 程序员
C# 去掉字符串最后一个字符的 4 种方法
在实际业务中,我们经常会遇到在循环中拼接字符串的场景,循环结束之后拼接得到的字符串的最后一个字符往往需要去掉,看看 C# 提供了哪4种方法可以高效去掉字符串的最后一个字符
452 0
|
2月前
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
|
2月前
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
|
2月前
|
程序员 C# 数据库
C# 比较对象新思路,利用反射技术打造更灵活的比较工具
中途接手的项目,碰到需要在更新对象信息时比较并记录差异的需求,最变态的还有附加要求,怎么办?有没有既能满足需求又能对项目影响最小的方法呢?分享这个我封装的方法,一个利用反射技术打造的更灵活的比较工具
|
3月前
|
人工智能 开发框架 前端开发
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
|
3月前
|
人工智能 开发框架 安全
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
|
5月前
|
SQL API 定位技术
基于C#使用winform技术的游戏平台的实现【C#课程设计】
本文介绍了基于C#使用WinForms技术开发的游戏平台项目,包括项目结构、运行截图、实现功能、部分代码说明、数据库设计和完整代码资源。项目涵盖了登录注册、个人信息修改、游戏商城列表查看、游戏管理、用户信息管理、数据分析等功能。代码示例包括ListView和ImageList的使用、图片上传、图表插件使用和SQL工具类封装,以及高德地图天气API的调用。
基于C#使用winform技术的游戏平台的实现【C#课程设计】
|
4月前
|
人工智能 开发框架 C#
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)