先创建一个类:

 /// <summary>
/// 字符串分析
/// </summary>
interface IStringAna
{
/// <summary>
/// key:文本包含的汉字或英文单词,value:汉字或英文单词出现的次数
/// </summary>
/// <param name="text"></param>
/// <returns>key:文本包含的汉字或英文单词,value:汉字或英文单词出现的次数</returns>
Dictionary<string, int> Ana(string text);
} class StringAna : IStringAna
{
public Dictionary<string, int> Ana(string text)
{
var words = new List<string>();
var dict = new Dictionary<string, int>();
byte[] bts = Encoding.Unicode.GetBytes(text);
//foreach (var bt in bts)
//{
// Console.Write(string.Format("{0} ",bt));
//}
//Console.WriteLine();
var pointer = ;
var i = ;
while (i <= bts.Length-)
{
byte[] tmp; if (bts[i + ] == && bts[i] != )
{
pointer = i;
while (pointer + < bts.Length && bts[pointer +] != && bts[pointer + +] == )
{
pointer += ;
}
var len = pointer+ - i;
tmp = new byte[len];
Array.Copy(bts, i, tmp, , len);
i = pointer+;
}
else if (bts[i] == && bts[i + ] == )
{
i += ;
continue;
}
else
{
tmp = new byte[] { bts[i], bts[i + ] };
i += ;
}
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<string,int> dict,string word)
{
int value;
if(dict.TryGetValue(word,out value))
{
dict[word] = value + ;
}
else
{
dict[word] = ;
} }
}

实现接口:

     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}");
}

c#拆分字符串英文和数字(包括国外所以文字)的更多相关文章

  1. 写出将字符串中的数字转换为整型的方法,如:“as31d2v”->312,并写出相应的单元测试,正则去掉非数值、小数点及正负号外的字符串

    写出将字符串中的数字转换为整型的方法,如:"as31d2v"->312,并写出相应的单元测试,输入超过int范围时提示不合法输入. public struct Convert ...

  2. JAVA 统计字符串中中文,英文,数字,空格的个数

    面试题:输入一行字符,分别统计出其中英文字母.中文字符.空格.数字和其它字符的个数 可以根据各种字符在Unicode字符编码表中的区间来进行判断,如数字为'0'~'9'之间,英文字母为'a'~'z'或 ...

  3. C#、Java实现按字节截取字符串包含中文汉字和英文字符数字标点符号等

    C#.Java实现按字节截取字符串,字符串中包含中文汉字和英文字符数字标点符号等. 在实际项目应用过程中,尤其是在web开发时可能遇到的比较多,就以我的(JiYF笨小孩管理系统)为例,再发布文章时候, ...

  4. JavaScript验证字符串只能包含数字或者英文字符的代码实例

    验证字符串只能包含数字或者英文字符的代码实例:本章节分享一段代码实例,它实现了验证字符串内容是否只包含英文字符或者数字.代码实例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  5. 截取字符(pos,copy,Leftstr,MidStr,RightStr)以逗号为准把字符串拆分,判断字符串是否有数字、字母(大小写), 去掉字符串空格

    1.copy(a,b,c) 举个例子: str := “123456”;str1 := Copy(Str,2,3);结果就是 str1 等于 234.Copy有3个参数,第一个是你要处理的字符串,第二 ...

  6. 在sqlserver中如何从字符串中提取数字,英文,中文,过滤重复字符

    原文:在sqlserver中如何从字符串中提取数字,英文,中文,过滤重复字符 最近做项目的时候,经常用到一个字符串中的某些字符,处理起来非常的棘手,现在用下面的方法就可以很方便的从字符串中处理你想要的 ...

  7. iOS--判断字符串NSString中数字、中文、大小写英文

    iOS--判断字符串NSString中数字.中文.大小写英文   <iframe id="iframeu2051914_0" src="http://pos.bai ...

  8. JAVA 统计字符串中中文,英文,数字,空格,特殊字符的个数

    引言 可以根据各种字符在Unicode字符编码表中的区间来进行判断,如数字为'0'~'9'之间,英文字母为'a'~'z'或'A'~'Z'等,Java判断一个字符串是否有中文是利用Unicode编码来判 ...

  9. delphi 拆分字符串

    最近在使用Delphi开发一种应用系统的集成开发环境.其中需要实现一个字符串拆分功能,方法基本原型应该是:procedure SplitString(src: string ; ch: Char; v ...

随机推荐

  1. ptmx

    ptmx DESCRIPTION The file /dev/ptmx is a character file with major number 5 and minor number 2, usua ...

  2. Metasploit自动攻击模块

    Metasploit自动攻击模块 Usage: db_autopwn [options] -h Display this help text -t Show all matching exploit ...

  3. Panabit的各种配置文件

    Panabit的各种配置文件 1.启动配置文件路径:/etc/rc.local作用:这个文件里的内容是BSD启动后会自动执行的命令默认配置如下:fsck -y -t ufs /dev/ad0s2a & ...

  4. 参数化解决sql注入

    用DynamicParameters: string where = " where a.is_deleted=0 and a.bvent_id=@bventId and au.user_t ...

  5. XMPP即时通讯协议使用(十三)——获取当前在线用户或关闭指定用户

    1.开启REST API插件或根据需求修改其插件源码: 2.添加服务器->服务器管理->系统属性中添加 plugin.restapi.enabled=true 3.pom依赖 <de ...

  6. USTC现代软件工程--summary

    起笔:我希望先简单总结一下我在这门课程中经历的一些工作以及学习到的一些东西,再对自己.队友.老师做一个评价.然后我想提出一些对这门课程的一些看法和建议,与自己的心得体会. 第一部分: 我在这门课上经历 ...

  7. 一、免费API调用

    一.免费API调用: 免费天气api接口 JS调用示例 <!DOCTYPE html> <html lang="zh-CN"> <head> & ...

  8. HTML基础 img标签 做一个图库

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. Flutter-ListView

    return Container( child: ListView( children: <Widget>[ Column( children: <Widget>[ Conta ...

  10. BZOJ3331 BZOJ2013 压力

    考前挣扎 圆方树这么早就出现了嘛... 要求每个点必须被经过的次数 所以就是路径上的割点/端点++ 由于圆方树上所有非叶子圆点都是割点 所以就是树上差分就可以辣. 实现的时候出了一点小问题. 就是这里 ...