Разделить строку на 2 разные подстроки vb.net

Я пытаюсь разбить строку на 2 подпрограммы. Первый содержит первые 236 (от 0 до 235) символов, а второй — от 237 до конца строки.

firststr = str.Substring(0, 235)
secondstr = str.Substring(235, strLength)  'strLength is the total length of the string

strLength генерирует ошибку: индекс и длина должны относиться к местоположению в строке. Имя параметра: длина

Любая помощь?


person l3_08    schedule 09.08.2011    source источник


Ответы (6)


Вам нужно что-то вроде этого:

secondstr = str.Substring(235, strLength - 235)

Поскольку strLength — это длина всей строки, и вы начинаете с позиции 235, вы идете дальше конца строки.

person James Johnson    schedule 09.08.2011

Второй аргумент - это количество символов, которое вам нужно, а не конечная позиция. Попробуйте что-то вроде: secondstr = str.Substring(235, strLength-235) (возможно, вам также нужно -1)

person Eddy    schedule 09.08.2011
comment
Второй аргумент имеет неопределяемую длину до конца строки, какой бы ни была длина. Я попробовал -1 не сработало, а -235 сработало. Спасибо! - person l3_08; 09.08.2011

Обычно data вторым аргументом будет длина нужной подстроки, в данном случае strLength-236. Я не знаю vb.net, но в C# вам не нужно указывать вторую переменную strLength для secondstr при использовании подстроки, потому что по умолчанию идет конец строки.

[править] - исправлено

person Evan Layman    schedule 09.08.2011

Если вы просто хотите перейти к концу строки, вы можете не указывать параметр длины при использовании метода Substring. По умолчанию идет в конец строки.

secondstr = str.Substring(236)

сделает работу за вас.

person Karl S    schedule 14.08.2011

Насколько я вижу, ваша переменная strLength имеет значение, выходящее за границы строки str.

person Leniel Maccaferri    schedule 09.08.2011

Я отмечаю, что никто не обнаружил другую ошибку в вашем коде, как описано.

Второй аргумент Substring — это возвращаемая длина, поэтому firstStr содержит то же, что и Left(str, 235), то есть содержит 235 символов, как вы написали, а не 236.

Для полноты вот решение VB для вашего запроса:

firststr = Left(str, 236)
secondstr = Mid(str, 237)
person Mark Hurd    schedule 19.06.2012