2015-06-29 3 views
1

Я новичок в программировании, и я пытаюсь разбить строку ниже на 36.20C, но я продолжаю получать ArgumentOutOfRangeWasUnhandled. Зачем?Ошибки с разделительной строкой

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.20C

+0

Если «Температура:» просто пример или реальное значение, которое вы хотите удалить из строки? Если последний, то «var temp = inStr.Replace (« Температура: »,« »); –

+0

Вы хотите удалить 'C' с конца или почему вы указали его индекс и используете' Substring' с ним? –

+0

@ Николас Чан: Знаете ли вы, что вы можете выбрать ответ на свои вопросы? – CharithJ

ответ

1

Если вы проверите documentation for Substring, вы увидите, что вторым параметром является длина, а не конечная позиция. Тем не менее, есть an overload for SubString that only needs the start position и он будет возвращать строку оттуда до конца строки:

int indexOfSpace = inStr.IndexOf(':'); 
string Temp = inStr.Substring(indexOfSpace + 1); 
1
var arrayStr = inStr.split(':'); 
textbox1.text = arrayStr[1]; 
1

вы можете сделать это, как

string Temp = inStr.Substring(indexOfSpace + 1, inStr.Length - indexOfSpace - 1) 
4

Второй аргумент String.Substring является длиной, но вы предоставили конечный индекс. Вы должны вычесть их:

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'); 
+0

Почему этот ответ так сильно поддерживается? Это плохой ответ по следующим причинам: 1. '++ indexOfSpace' вместо' indexOfSpace + 1' - ужасный совет, поскольку он без необходимости изменяет переменную; 2. параметр 'indexOfC - indexOfSpace' не требуется и 3. Затем он заполняется излишним советом по удалению« C »с конца строки, которую OP не требует. –

+1

@DavidArno: 1) 'indexOfSpace' может быть изменен, так как OP интересуется только начальным индексом токена ** после ** двоеточия. В противном случае он всегда должен использовать 'indexOfSpace + 1'. 2) 'indexOfC - indexOfSpace' требуется, чтобы показать OP, как правильно использовать' Substring', так как он предполагает, что второй aprameter является конечным индексом. 3) Я просто хотел показать OP другим способом удаления 'C' из end вместо использования 'IndexOf' и' Substring'. –

+0

1) Просто потому, что он может быть изменен, не означает, что он должен быть. Измените значение переменной только тогда, когда вам нужно. Ваш совет - плохая практика. 2) Существует перегрузка, которая вообще не нуждается во втором параметре.3) ОП не спросил, как удалить «С», поэтому вы не отвечаете на вопрос. –

0

Второй параметр Substring является длина. Вы должны обновить следующее:

string Temp = inStr.Substring(indexOfSpace + 1, indexOfC - indexOfSpace); 
0

Просто используйте string.Split().

string[] temp = inStr.Split(':'); 
textbox1.Text = temp[1]; 
// temp[1] returns "36.20C" 
// temp[0] returns "Temperature" 
0
string temperature = "temperature:32.25C"; 
Console.WriteLine(temp.Substring(temp.Trim().IndexOf(':')+1)); 

В подстроках, второй аргумент длина и, если и не указан процессы аргумента подстроки до конца строки.

Смежные вопросы