如何用阿斯克码找出标点符号 如何用阿斯克码找出标点符号如:string a=“你好啊” abc:最近怎么样呢?呵呵!我要得到的结果是:你好啊abc最近怎么样呢呵呵。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接分割就可以判断 string str= i.Split('?'); 下面IsPunctuation方法用于判断是否标点,其具体实现我这里没写。应根据标点的取值范围判断字符是否标点,具体“标点”的定义得根据具体需求判定。ASCII码得标点范围大概是这样32-47 标点1区(32是空格)48-57 数字49-64 标点2区65-90 大写字母91-96 标点3区97-122 小写字母123-126 标点4区中文标点的unicode分布范围的查其他资料。 static void Main() { string s = "你好啊 abc:最近怎么样呢? "; string s2 = new string(s.Where(c => !IsPunctuation(c)).ToArray()); Console.WriteLine(s2); //output: 你好啊 abc最近怎么样呢 } static bool IsPunctuation(char c) { if (c == ':' || c == '?') return true; else return false; } 我的意思是要去除字符串中的所有符号,那些符号也不一定知道。我刚找到了java中的一种方法,但有点不解。谁懂的给我解释一下,代码是:Regex.Replace(emcontent, @"\p{P}", "");谢了 对于ASCII码符号的区分5楼已经说得很详细了,对于GB2312编码,从0xBAA1开始后面全部是汉字,前面的全部是符号 不好意思,说错了对于ASCII码符号的区分5楼已经说得很详细了,对于GB2312编码,从0xB0A1开始后面全部是汉字,前面的全部是符号 ……发了帖就反应过来了,原来指的ASCII,Sorry 五楼的static void Main() { string s = "你好啊 abc:最近怎么样呢? "; string s2 = new string(s.Where(c => !IsPunctuation(c)).ToArray()); Console.WriteLine(s2); //output: 你好啊 abc最近怎么样呢 } static bool IsPunctuation(char c) { if (c == ':' || c == '?') return true; else return false; }c不也是手动判断是否是哪个符号吗,关键我不知道具体是哪个符号啊 分割然后在把字符串数组拼接成一个string 不就没有?号了。当然正则是可以做到的。 对于ASCII码符号的区分5楼已经说得很详细了,对于GB2312编码,从0xB0A1开始后面全部是汉字,前面的全部是符号,按照编码删除了就可以啦 我不知道ASCII码的符号怎么写,能给个例子吗?求代码啊 IsPunctuation的实现我本来就没写出来,你要根据字符的范围判断,如果你不知道怎么判断,这里给个实现的例子吧: static void GetPunctuation() { string s = "你好啊 abc:最近_=怎么样呢???"; string s2 = new string(s.Where(c => !IsPunctuation(c)).ToArray()); Console.WriteLine(s2); //output: :你好啊 abc最近怎么样呢 } static bool IsPunctuation(char c) { return (33 <= c && c <= 47) || (49 <= c && c <= 64) || (91 <= c && c <= 96) || (123 <= c && c <= 126) || c >= 65248; }65248是ASCII字符的全角字符的编码差。就是个例子,希望楼主举一反三。用正则表达式当然也行,还是要去判断编码范围,若用\p{P},应该没有满足条件的P只包含非标点的中文字符的。 英文符号判断用楼上的方法挺好的,但是中文符号我查了几种中文编码,除了提供的范围之外都符号或者其它文字符号出现,我没仔细研究,反正GB2312编码中汉字和符号的划分是很明显的,下面是我的一点测试代码,仅作参考。 Encoding gb = Encoding.GetEncoding("GB2312"); byte[] b = gb.GetBytes("控"); if ((b[0] < 0xb0 && b[0] > 0xa0) || b[0] > 0xf8) MessageBox.Show("中文符号"); byte[] b=gb.GetBytes("控");if((b[0]<0xb0 && b[0]>0xa0)|| b[0]>0xf8)不明白什么意思啊 GB2312汉字编码,每个汉字包含两个字节,这两个字节十六进制值都大于0xa1,第一个字节也就是b[0]表示区码,是从0xa1-0xf8,GB2312中有94个区,但从0xf9之后通常都是空的。每个区包含94个汉字,就是b[1]中的值,称为位码,十六进制值是从0xa1-0xfe。汉字是从0xb0开始的,之前的几个都是各种符号。 弄懂这些,上面的判断应该就明白了吧。 如果ASCII码和汉字混合起来可以根据十六进制值来判断,汉字就是上面说的,ASCII码字符(包括符号)小于0x7f,大小0x1。ASCII码从0x00到0xff都有定义,只是0x80之后是表格等特殊符号,不常用。 漏了几个字,重新补上:GB2312汉字编码,每个汉字包含两个字节,这两个字节十六进制值都大于0xa1,第一个字节也就是b[0]表示区码,是从0xa1-0xf8,GB2312中有94个区,但从0xf9之后通常都是空的。每个区包含94个汉字,就是b[1]中的值,称为位码,十六进制值是从0xa1-0xfe。汉字是从0xb0区开始的,之前的几个区都是各种符号。 弄懂这些,上面的判断应该就明白了吧。 如果ASCII码和汉字混合起来可以根据十六进制值来判断,汉字就是上面说的,ASCII码字符(包括符号)小于0x7f,大小0x1。ASCII码从0x00到0xff都有定义,只是0x80之后是表格等特殊符号,不常用。 vs2010 API 我的textBox怎么不能绑定? Combox.AutoCompleteXXX问题,求教(在线等) 如何判断一个object是那种简单类型 达人请教:有没有比较好用的封装好 socket 的c#网络库? 高分 求帮忙 很简单的 但绝对不是大问题 50分送上 C#关于随机数抽取问题 如何删除系统文件夹内的文件? Visual Studio 控件事件丢失问题 反射无法获取Meta中的特性 C# 做exchange添加邮箱功能 尝试读取或写入受保护的内存。这通常指示其他内存已损坏
应根据标点的取值范围判断字符是否标点,具体“标点”的定义得根据具体需求判定。
ASCII码得标点范围大概是这样
32-47 标点1区(32是空格)
48-57 数字
49-64 标点2区65-90 大写字母
91-96 标点3区
97-122 小写字母
123-126 标点4区中文标点的unicode分布范围的查其他资料。 static void Main()
{
string s = "你好啊 abc:最近怎么样呢? ";
string s2 = new string(s.Where(c => !IsPunctuation(c)).ToArray());
Console.WriteLine(s2); //output: 你好啊 abc最近怎么样呢
} static bool IsPunctuation(char c)
{
if (c == ':' || c == '?')
return true;
else
return false;
}
我刚找到了java中的一种方法,但有点不解。
谁懂的给我解释一下,代码是:Regex.Replace(emcontent, @"\p{P}", "");
谢了
static void Main()
{
string s = "你好啊 abc:最近怎么样呢? ";
string s2 = new string(s.Where(c => !IsPunctuation(c)).ToArray());
Console.WriteLine(s2); //output: 你好啊 abc最近怎么样呢
} static bool IsPunctuation(char c)
{
if (c == ':' || c == '?')
return true;
else
return false;
}
c不也是手动判断是否是哪个符号吗,关键我不知道具体是哪个符号啊
分割然后在把字符串数组拼接成一个string 不就没有?号了。
当然正则是可以做到的。
对于ASCII码符号的区分5楼已经说得很详细了,对于GB2312编码,从0xB0A1开始后面全部是汉字,前面的全部是符号,按照编码删除了就可以啦
{
string s = "你好啊 abc:最近_=怎么样呢???";
string s2 = new string(s.Where(c => !IsPunctuation(c)).ToArray());
Console.WriteLine(s2); //output: :你好啊 abc最近怎么样呢
} static bool IsPunctuation(char c)
{
return (33 <= c && c <= 47)
|| (49 <= c && c <= 64)
|| (91 <= c && c <= 96)
|| (123 <= c && c <= 126)
|| c >= 65248;
}65248是ASCII字符的全角字符的编码差。就是个例子,希望楼主举一反三。
用正则表达式当然也行,还是要去判断编码范围,若用\p{P},应该没有满足条件的P只包含非标点的中文字符的。
Encoding gb = Encoding.GetEncoding("GB2312");
byte[] b = gb.GetBytes("控");
if ((b[0] < 0xb0 && b[0] > 0xa0) || b[0] > 0xf8)
MessageBox.Show("中文符号");
if((b[0]<0xb0 && b[0]>0xa0)|| b[0]>0xf8)不明白什么意思啊
弄懂这些,上面的判断应该就明白了吧。
如果ASCII码和汉字混合起来可以根据十六进制值来判断,汉字就是上面说的,ASCII码字符(包括符号)小于0x7f,大小0x1。ASCII码从0x00到0xff都有定义,只是0x80之后是表格等特殊符号,不常用。
弄懂这些,上面的判断应该就明白了吧。
如果ASCII码和汉字混合起来可以根据十六进制值来判断,汉字就是上面说的,ASCII码字符(包括符号)小于0x7f,大小0x1。ASCII码从0x00到0xff都有定义,只是0x80之后是表格等特殊符号,不常用。