如何让IndexOf()方法返回正确的值?

Thu*_*3eR 0 .net c# asp.net

我一直在使用googlemaps,我现在正在寻找格式坐标.

我得到以下格式的坐标:

地址(坐标)缩放级别.

我使用indexof方法得到"("+1的开头,这样我得到坐标的第一个数字,并将这个值存储在我称之为"start"的变量中.

然后我做同样的事情,但这次我得到索引")"-2得到最后一个坐标的最后一个数字,并将这个值存储在我称之为"结束"的变量中.

我收到以下错误:"索引和长度必须引用string.Parameter name中的位置:length"

我得到以下字符串作为一个imparameter:

"Loddvägen 155, 840 80 Lillhärdal, Sverige (61.9593214318303,14.0585965625)5"
Run Code Online (Sandbox Code Playgroud)

根据我的计算,我应该在start变量中得到值36,在end变量中得到值65

但出于某种原因,我在开始时得到41,在结束时得到71.

为什么?

public string RemoveParantheses(string coord)
        {
            int start = coord.IndexOf("(")+1;
            int end = coord.IndexOf(")")-2;

            string formated = coord.Substring(start,end);
            return formated;
        }
Run Code Online (Sandbox Code Playgroud)

然后我尝试硬编码正确的值

string Test = cord.Substring(36,65);
Run Code Online (Sandbox Code Playgroud)

然后我得到以下错误:

startindex不能大于字符串的长度.参数名称startindex

我理解这两个错误的意思,但在这种情况下,它们是不正确的,因为我不会超出字符串长度值.

谢谢!

gwi*_*003 8

第二个参数Substring是长度(MSDN源).既然你是在传递65的第二个参数,您的通话正在试图获得之间的字符36101 (36+65).您的字符串中没有101个字符,因此会引发错误.要获取(字符之间的数据,请使用:

public string RemoveParantheses(string coord)
{
    int start = coord.IndexOf("(")+1;
    int end = coord.IndexOf(")")-2;

    string formated = coord.Substring(start, end - start);
    return formated;
}
Run Code Online (Sandbox Code Playgroud)

编辑:它仅使用坐标的原因是因为总字符串的长度较短,并且由于坐标从第一个位置开始,因此结束坐标是最后一个位置.例如...

//using "Loddvägen 155, 840 80 Lillhärdal, Sverige (61.9593214318303,14.0585965625)5"
int start = coord.IndexOf("(") + 1;  // 36
int end = coord.IndexOf(")")-2;      // 65
coord.Substring(start, end);         //looks at characters 35 through 101

//using (61.9593214318303,14.0585965625)5
int start = coord.IndexOf("(") + 1;  // 1
int end = coord.IndexOf(")")-2;      // 30
coord.Substring(start, end);         //looks at characters 1 through 31
Run Code Online (Sandbox Code Playgroud)

第二个实例有效,因为31实际存在于您的字符串中.将地址添加到字符串的开头后,您的代码将不再有效.

  • 虽然我猜它没有明确解释或记录,但我认为文档假定每个人都知道`length = end - start`.我讨厌假设我们知道任何事情的文档...... (2认同)