C# 拆分字符串时出错
我对编程非常陌生,我正试图将下面的字符串拆分为36.20C,但我一直无法处理ArgumentOutofRange。为什么?C# 拆分字符串时出错,c#,C#,我对编程非常陌生,我正试图将下面的字符串拆分为36.20C,但我一直无法处理ArgumentOutofRange。为什么? private void button1_Click(object sender, EventArgs e) { string inStr = "Temperature:36.20C"; int indexOfSpace = inStr.IndexOf(':'); //stores the address of th
private void button1_Click(object sender, EventArgs e)
{
string inStr = "Temperature:36.20C";
int indexOfSpace = inStr.IndexOf(':');
//stores the address of the space
int indexOfC = inStr.IndexOf("C");
//stores the address of char C
string Temp = inStr.Substring(indexOfSpace + 1, indexOfC);
textBox1.Text = Temp;
}
预期输出:36.20摄氏度
var arrayStr = inStr.split(':');
textbox1.text = arrayStr[1];
string Temp = inStr.Substring(indexOfSpace + 1, inStr.Length - indexOfSpace - 1)
你可以这样做
string Temp = inStr.Substring(indexOfSpace + 1, inStr.Length - indexOfSpace - 1)
的第二个参数是长度,但您已经提供了结束索引。您需要减去它们:
string Temp = inStr.Substring(++indexOfSpace, indexOfC - indexOfSpace);
您还可以从末尾删除C
:
string Temp = inStr.Substring(++indexOfSpace).TrimEnd('C'); // using the overload that takes the rest
另一方面,在这种情况下,您应该将IndexOf
的重载与开始索引一起使用:
int indexOfC = inStr.IndexOf('C', indexOfSpace);
以下是一个更简单的方法:
Temp = inStr.Split(':').Last().TrimEnd('C');
的第二个参数是长度,但您已经提供了结束索引。您需要减去它们:
string Temp = inStr.Substring(++indexOfSpace, indexOfC - indexOfSpace);
您还可以从末尾删除C
:
string Temp = inStr.Substring(++indexOfSpace).TrimEnd('C'); // using the overload that takes the rest
另一方面,在这种情况下,您应该将IndexOf
的重载与开始索引一起使用:
int indexOfC = inStr.IndexOf('C', indexOfSpace);
以下是一个更简单的方法:
Temp = inStr.Split(':').Last().TrimEnd('C');
如果检查,您将看到第二个参数是长度,而不是结束位置。但是,有,它将返回从那里到字符串末尾的字符串:
int indexOfSpace = inStr.IndexOf(':');
string Temp = inStr.Substring(indexOfSpace + 1);
如果检查,您将看到第二个参数是长度,而不是结束位置。但是,有,它将返回从那里到字符串末尾的字符串:
int indexOfSpace = inStr.IndexOf(':');
string Temp = inStr.Substring(indexOfSpace + 1);
子字符串的第二个参数是长度。您必须按以下方式更新:
string Temp = inStr.Substring(indexOfSpace + 1, indexOfC - indexOfSpace);
子字符串的第二个参数是长度。您必须按以下方式更新:
string Temp = inStr.Substring(indexOfSpace + 1, indexOfC - indexOfSpace);
只需使用string.Split()
只需使用string.Split()
在子字符串中,第二个参数是长度,如果不指定任何参数,则子字符串将一直处理到字符串末尾
在子字符串中,第二个参数是长度,如果您不指定任何参数,子字符串将一直处理到字符串末尾。if“Temperature:”只是一个示例,还是要从字符串中删除的实际值?如果是后者,则“var temp=仪表更换”(“温度:,”);你想从结尾删除C
,还是你为什么要确定它的索引并使用Substring
?@Nicholas Chan:你知道你可以为你的问题选择答案吗?如果“Temperature:”只是一个例子,或者你想从字符串中删除的真实值?如果是后者,则“var temp=仪表更换”(“温度:,”);你想从末尾删除C
,还是你为什么要确定它的索引并使用Substring
?这是一个糟糕的答案,原因如下:1++indexOfSpace
而不是indexOfSpace+1
是一条可怕的建议,因为它不必要地修改了变量;2.indexOfC-indexOfSpace
参数不是必需的,3。然后,它充满了关于从字符串末尾删除“C”的多余建议,OP不需要这些建议。@DavidArno:1)indexOfSpace
可以修改,因为OP只对冒号后标记的开始索引感兴趣。否则,他必须始终使用indexOfSpace+1
。2) indexOfC-indexOfSpace
需要向OP展示如何正确使用子字符串,因为他假设第二个参数是结束索引3)我只是想向OP展示一种不同的方法,从结束处删除C
,而不是使用IndexOf
和子字符串
.1),因为它可以修改,并不意味着它应该被修改。只有在必要时才改变变量的值。你的建议是错误的做法。2) 存在完全不需要第二个参数的重载。3) OP没有询问如何删除C
,因此您没有回答这个问题。@DavidArno:将正确的值赋给变量,而不是总是使用错误的+1,这是一个不错的做法。我已经证明了有一个超负荷,它占据了字符串的其余部分,我只是想展示first OP的方法,并告诉他出了什么问题。我认为他想删除C
,因为他已经确定了它的索引,并将其用作子字符串的第二个参数。但再看看这个问题,可能是我错了。那么不清楚他为什么对C
的索引如此感兴趣。为什么这个答案被如此高的投票率?这是一个糟糕的答案,原因如下:1++indexOfSpace
而不是indexOfSpace+1
是一条可怕的建议,因为它不必要地修改了变量;2.indexOfC-indexOfSpace
参数不是必需的,3。然后,它充满了关于从字符串末尾删除“C”的多余建议,OP不需要这些建议。@DavidArno:1)indexOfSpace
可以修改,因为OP只对冒号后标记的开始索引感兴趣。否则,他必须始终使用indexOfSpace+1
。2) indexOfC-indexOfSpace
需要向OP展示如何正确使用子字符串,因为他假设第二个参数是结束索引3)我只是想向OP展示一种不同的方法,从结束处删除C
,而不是使用IndexOf
和子字符串
.1),因为它可以修改,并不意味着它应该被修改。只有在必要时才改变变量的值。你的建议是错误的做法。2) 存在完全不需要第二个参数的重载。3) OP没有询问如何删除C
,因此您没有回答这个问题。@DavidArno:将正确的值赋给变量,而不是总是使用错误的+1,这是一个不错的做法。我已经证明了有一个超负荷,它占据了字符串的其余部分,我只是想展示first OP的方法,并告诉他出了什么问题。我认为他想删除C
,因为他已经确定了它的索引,并将其用作子字符串的第二个参数。但再看看这个问题,它是c