我有一个文本文件 它是这样的格式
例如:
    123
哈哈123
(注意,第一行前面是两个空格)现在我想用一个标志的方法 去读“123”现在只能用下面的方法:
第一行用SubString(4,3)
第二行用SubString(2,3)奇怪,中文不是占两个字节吗,按道理第二行也用SubString(4,3)啊
现在我该怎么办呢 现在文件前面保证是4个空格的大小,两个汉字好也是4个空格的大小
现在读“123”  有什么好的方法吗》

解决方案 »

  1.   

    中文是站2个字节没错
    不过string里的操作substring是算长度,一个汉字长度为1
      

  2.   

                string s = "哈哈";
                int i = Encoding.Default.GetByteCount(s);  //i=4
                int j = s.Length;  //j=2;
      

  3.   

    SubString等字符串方法中的长度指的是字符的长度,一个汉字也是一个字符,而不是按字节算法的。
      

  4.   

                string a = "0101    01010048-12    4飘鲜果防毛水        6903148036594 ";
                a = System.Text.RegularExpressions.Regex.Split(a, @"\s+")[2];
      

  5.   

    1.正则表达式
    2.呢 现在文件前面保证是4个空格的大小,两个汉字好也是4个空格的大小 
    string s1="    123";
    string s2="哈哈123";
    string ss=getstr(s1);//123
    string sss=getstr(s2);//123
    string getstr(string s)
    {
    byte [] temp=Encoding.Default.GetBytes[s];
    return Encoding.Default.GetString(temp,4,temp.Length);
    }
      

  6.   

    1:在.NET中 string.Length统计的是“字符”的个数,而不是字节流的长度,要取得字节流的长度必须用:
    int k = Encoding.Default.GetByteCount(s);  
    而且其中和Encoding.XXX你还必须选择正确的编码格式,一般用默认是正确的。可选的还有UTF8,Unicode等。如果这个不正确,有可能导致计算的结果不正确。2:我想了一下如果你想要解决这个问题,比较好的方式是改变你的这个文件的编码方式,你的这个编码方式不合理。修改这个文件可以解决这个问题。
    如果你一定要用这个方法来解决这个问题,就只能是自己解决了。
    s.SubString(s.Indexof("123"),3);
    这可以解决。
      

  7.   

    楼主是想实现提取特殊字符的功能吧
    用正则就行了
    \d 数字:[0-9] 
    \D 非数字: [^0-9] 
    \s 空白字符:[ \t\n\x0B\f\r] 
    \S 非空白字符:[^\s] 
    \w 单词字符:[a-zA-Z_0-9] 
    \W 非单词字符:[^\w] 
      

  8.   

                string s1 = "哈哈123";
                string s2 = "    456";
                MessageBox.Show(Regex.Match(s1, @"(?<=( ){4}|[\u4e00-\u9fa5]{2})\w{3}").Value);
                MessageBox.Show(Regex.Match(s2, @"(?<=( ){4}|[\u4e00-\u9fa5]{2})\w{3}").Value);
      

  9.   

    修正一下是
    return Encoding.Default.GetString(temp,4,temp.Length-4);