Функция SubString в vb.net выдает исключение

FromIpсодержит "192.168.1.1". Я хочу получить последний номер, но не могу понять, что здесь не так:


    Dim str As String
    str = FromIP.Text.Substring(FromIP.Text.LastIndexOf("."), FromIP.Text.Length).ToString()
    MessageBox.Show(FromIP.Text.Length)
12.12.2008 11:58:19
4 ОТВЕТА
РЕШЕНИЕ

Протестированный код:

    Dim FromIp As String = "192.168.1.1"
    Dim str As String
    str = FromIp.Substring(FromIp.LastIndexOf(".") + 1).ToString()
    MessageBox.Show(str)
  • Вы должны добавить 1 в LastIndexOf, чтобы пропустить точку
  • Там нет необходимости указывать длину подстроки, когда вы хотите, чтобы все остальные строки

Но этот переработанный код будет работать лучше:

    Dim FromIp As String = "192.168.1.1"
    Dim IpPart As String() = FromIp.Split(".")
    MessageBox.Show(IpPart(3))
4
12.12.2008 12:18:31
В качестве альтернативы это может быть: Dim IpPart As String () = FromIp.Split (".")
Tomalak 12.12.2008 12:13:11
Просто чтобы быть разборчивым .. вы можете использовать Dim IpPart As String = FromIp.Split (".") (3)
spacemonkeys 12.12.2008 13:54:16

Насколько я помню, Substring принимает Start, Stop в качестве параметров.

Так что это будет: txt.Substring(IndexOf, txt.Length - IndexOf)или только с одним параметром: Substring (IndexOf + 1)

0
12.12.2008 12:05:52
FromIP.Text.LastIndexOf(".") + 1 

вместо

FromIP.Text.LastIndexOf(".") 

а также

FromIP.TextLength-FromIP.Text.LastIndexOf(".") 

последний параметр вместо

FromIP.TextLength
1
10.06.2012 03:21:02

Эдуардо дал правильный способ получения подстроки - мой ответ здесь просто объяснит, почему существующая не работает.

String.Substring(int, int)занимает исходную позицию и отсчет . Вы в основном говорите: «Перейдите с позиции 9 на 10 символов». Документация прямо заявляет, что это бросит:

ArgumentOutOfRangeException [if]

startIndex плюс длина указывает позицию не в этом экземпляре.

-или-

startIndex или длина меньше нуля.

5
12.12.2008 12:07:05