本帖最后由 LL223851 于 2011-09-13 15:20:46 编辑

解决方案 »

  1.   

    substring应该已经不错了,至少不需要字符串匹配。
      

  2.   

    对于这道题来说  我不赞成用正则
    我觉得LZ用substring()应该是属于 比较好的方法
      

  3.   

    正则之后是不是还要substring()提取度分秒啊?我这些数据要运算的,计算两点之间的距离等,运算量比较大,但是我现在要求所有的数据处理操作(还有其他运算)总时间在在200ms之内,目前已经超出这个时间了,我想找更优化的计算方法
      

  4.   

    正则的优势在于即使串有变化,只要符合特定的模板,依旧可以取出需要的子串。而不是象substring那样从固定的索引值开始。你提到你的数据处理比较耗时,那么就要审视一下你的源数据了,如果每一个串的+/-号位置固定,那么substring速度会胜出。但如果要精细地取出经度或者纬度的中度、分、秒,则推荐使用正则。而数据处理,可能用并行处理的,就用并行多线程去解决。
      

  5.   

    "+1234517+451234"
    先使用string.split(new char[]{'+','-'})
    分开经度和纬度,然后再读取度分秒;
    看你的字符串应该是分秒都必须是两位数的,
    所以要从字符串后面开始读,就是用.substring,慢慢弄
    最好先弄个度分秒的类;
    然后经度和纬度继承
      

  6.   


                string str = "+1234517+451234";
                string pattern = @"(\+|-)(\d{2,3})(\d{2})(\d{2})(\+|-)(\d{2,3})(\d{2})(\d{2})";
                Match mat = Regex.Match(str, pattern);
                if (mat.Success)
                {
                    string longitude = mat.Groups[1].Value;
                    string latitude = mat.Groups[5].Value;
                    double degreeLong = int.Parse(mat.Groups[2].Value);
                    double minLong = int.Parse(mat.Groups[3].Value);
                    double secLong = int.Parse(mat.Groups[4].Value);
                    double degreeLat = int.Parse(mat.Groups[6].Value);
                    double minLat = int.Parse(mat.Groups[7].Value);
                    double secLat = int.Parse(mat.Groups[8].Value);
                    Console.WriteLine("{0}经{1}°{2}′{3}″{4}纬{5}°{6}′{7}″", longitude == "+" ? "东" : "西", degreeLong, minLong, secLong, 
                        latitude == "+" ? "北" : "南", degreeLat, minLat, secLat);
                    double lon = degreeLong + minLong / 60 + secLong / 3600;
                    double lat = degreeLat + minLat / 60 + secLat / 3600;
                    Console.WriteLine(lon);
                    Console.WriteLine(lat);
                }
      

  7.   

    谢谢ojlovecd此处修改如下
    string pattern = @"(\+|-)(\d{2,3})(\d{2})(\d{2})(\+|-)(\d{1,2})(\d{2})(\d{2})";
      

  8.   

    应该是这样
    string pattern = @"(\+|-)(\d{1,3})(\d{2})(\d{2})(\+|-)(\d{1,2})(\d{2})(\d{2})";
      

  9.   

    对于字符串 通常处理方法就是indexof+substring 这个适合于固定格式的截取而用的多的是正则表达式 因为可以使用不同的字符串