如何用阿斯克码找出标点符号
如:string a=“你好啊” abc:最近怎么样呢?呵呵!我要得到的结果是:你好啊abc最近怎么样呢呵呵。

解决方案 »

  1.   

     直接分割就可以判断 string str= i.Split('?');
             
      

  2.   

    下面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;
            }
      

  3.   

    我的意思是要去除字符串中的所有符号,那些符号也不一定知道。
    我刚找到了java中的一种方法,但有点不解。
    谁懂的给我解释一下,代码是:Regex.Replace(emcontent, @"\p{P}", "");
    谢了
      

  4.   

    对于ASCII码符号的区分5楼已经说得很详细了,对于GB2312编码,从0xBAA1开始后面全部是汉字,前面的全部是符号
      

  5.   

    不好意思,说错了对于ASCII码符号的区分5楼已经说得很详细了,对于GB2312编码,从0xB0A1开始后面全部是汉字,前面的全部是符号
      

  6.   

    ……发了帖就反应过来了,原来指的ASCII,Sorry
      

  7.   

    五楼的
    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不也是手动判断是否是哪个符号吗,关键我不知道具体是哪个符号啊
      

  8.   


    分割然后在把字符串数组拼接成一个string 不就没有?号了。
    当然正则是可以做到的。
      

  9.   


    对于ASCII码符号的区分5楼已经说得很详细了,对于GB2312编码,从0xB0A1开始后面全部是汉字,前面的全部是符号,按照编码删除了就可以啦
      

  10.   

    我不知道ASCII码的符号怎么写,能给个例子吗?求代码啊
      

  11.   

    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只包含非标点的中文字符的。
      

  12.   

    英文符号判断用楼上的方法挺好的,但是中文符号我查了几种中文编码,除了提供的范围之外都符号或者其它文字符号出现,我没仔细研究,反正GB2312编码中汉字和符号的划分是很明显的,下面是我的一点测试代码,仅作参考。
                Encoding gb = Encoding.GetEncoding("GB2312");
                byte[] b = gb.GetBytes("控");
                if ((b[0] < 0xb0 && b[0] > 0xa0) || b[0] > 0xf8)
                    MessageBox.Show("中文符号");
      

  13.   

    byte[] b=gb.GetBytes("控");
    if((b[0]<0xb0 && b[0]>0xa0)|| b[0]>0xf8)不明白什么意思啊
      

  14.   

        GB2312汉字编码,每个汉字包含两个字节,这两个字节十六进制值都大于0xa1,第一个字节也就是b[0]表示区码,是从0xa1-0xf8,GB2312中有94个区,但从0xf9之后通常都是空的。每个区包含94个汉字,就是b[1]中的值,称为位码,十六进制值是从0xa1-0xfe。汉字是从0xb0开始的,之前的几个都是各种符号。
        弄懂这些,上面的判断应该就明白了吧。
        如果ASCII码和汉字混合起来可以根据十六进制值来判断,汉字就是上面说的,ASCII码字符(包括符号)小于0x7f,大小0x1。ASCII码从0x00到0xff都有定义,只是0x80之后是表格等特殊符号,不常用。
      

  15.   

    漏了几个字,重新补上:GB2312汉字编码,每个汉字包含两个字节,这两个字节十六进制值都大于0xa1,第一个字节也就是b[0]表示区码,是从0xa1-0xf8,GB2312中有94个区,但从0xf9之后通常都是空的。每个区包含94个汉字,就是b[1]中的值,称为位码,十六进制值是从0xa1-0xfe。汉字是从0xb0区开始的,之前的几个区都是各种符号。
      弄懂这些,上面的判断应该就明白了吧。
      如果ASCII码和汉字混合起来可以根据十六进制值来判断,汉字就是上面说的,ASCII码字符(包括符号)小于0x7f,大小0x1。ASCII码从0x00到0xff都有定义,只是0x80之后是表格等特殊符号,不常用。