技术经验分享: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
相关文章
|
3天前
|
编译器 API C#
技术心得记录:深入分析C#键盘勾子(Hook)拦截器,屏蔽键盘活动的详解
技术心得记录:深入分析C#键盘勾子(Hook)拦截器,屏蔽键盘活动的详解
|
3天前
|
关系型数据库 C# 数据库
技术笔记:MSCL超级工具类(C#),开发人员必备,开发利器
技术笔记:MSCL超级工具类(C#),开发人员必备,开发利器
|
4天前
|
C#
技术经验分享:C#DUID的用法及取得整数的几个方法
技术经验分享:C#DUID的用法及取得整数的几个方法
11 1
|
3天前
|
C#
C# 中的字符与字符串
C# 中的字符与字符串
6 0
|
3天前
|
数据采集 XML 存储
技术经验分享:C#构造蜘蛛爬虫程序
技术经验分享:C#构造蜘蛛爬虫程序
|
3天前
|
存储 C# 索引
技术经验分享:C#入门详解(8)
技术经验分享:C#入门详解(8)
|
3天前
|
Java BI C#
技术笔记:SM4加密算法实现Java和C#相互加密解密
技术笔记:SM4加密算法实现Java和C#相互加密解密
|
3天前
|
监控 C#
技术经验解读:【转】c#实现魔兽(warIII)中显血和改键功能(附源码)(不影响聊天打字)
技术经验解读:【转】c#实现魔兽(warIII)中显血和改键功能(附源码)(不影响聊天打字)
|
3天前
|
机器学习/深度学习 开发框架 .NET
技术经验解读:【c#】反射真的很可怕吗?
技术经验解读:【c#】反射真的很可怕吗?
|
3天前
|
XML 设计模式 C#
技术心得记录:某软件公司面试题c#
技术心得记录:某软件公司面试题c#