Подстрока, начинающаяся с определенного количества символов - PullRequest
0 голосов
/ 20 апреля 2011

Как бы вы выбрали последнюю часть строки, начиная с определенного количества символов.Например, я хотел бы получить весь текст после 3-й запятой.но я получаю сообщение об ошибке «StartIndex не может быть меньше нуля».

Dim testString As String = "part, description, order, get this text, and this text"
Dim result As String = ""
result = testString.Substring(testString.IndexOf(",", 0, 3))

Ответы [ 6 ]

3 голосов
/ 20 апреля 2011

Вот мои два цента:

string.Join(",", "aaa,bbb,ccc,ddd,eee".Split(',').Skip(2));
2 голосов
/ 20 апреля 2011

Код "testString.IndexOf (", ", 0, 3)" не находит третью запятую. Он находит первую запятую, начиная с позиции 0, смотря на первые 3 позиции (то есть позиции символов 0,1,2).

Если вы хотите, чтобы часть после последней запятой использовала что-то вроде этого:

Dim testString As String = "part, description, order, get this text"
Dim result As String = ""
result = testString.Substring(testString.LastIndexOf(",") + 1)

Обратите внимание на +1, чтобы перейти к персонажу после запятой. Вы должны также сначала найти индекс и добавить проверки, чтобы подтвердить, что индекс не равен -1, а также индекс

1 голос
/ 20 апреля 2011

Альтернативы (я полагаю, вам нужен весь текст после последней запятой):

Использование LastIndexOf:

' You can add code to check if the LastIndexOf returns a positive number
Dim result As String = testString.SubString(testString.LastIndexOf(",")+1)

Регулярные выражения:

Dim result As String = Regex.Replace(testString, "(.*,)(.*)$", "$2")
0 голосов
/ 20 апреля 2011

Я думаю, это то, что вы ищете

    Dim testString As String = "part, description, order, get this text"
    Dim resultArray As String() = testString.Split(New Char() {","c}, 3)
    Dim resultString As String = resultArray(2)
0 голосов
/ 20 апреля 2011

Функция IndexOf находит только " First " указанного символа. Последний параметр (в вашем случае 3) указывает, сколько символов нужно исследовать, а не вхождение.

См. Найти N-е вхождение символа в строку

Функция, указанная здесь, находит N-е вхождение символа. Затем используйте функцию подстроки для возвращенного вхождения.

Альтернативно, вы также можете использовать регулярное выражение для поиска n-го вхождения.

public static int NthIndexOf(this string target, string value, int n)
    {
        Match m = Regex.Match(target, "((" + value + ").*?){" + n + "}");

        if (m.Success)
        {
            return m.Groups[2].Captures[n - 1].Index;
        }
        else
        {
             return -1;
        }
    }
0 голосов
/ 20 апреля 2011

Третий аргумент indexOf - это количество символов для поиска.Вы ищете ,, начиная с 0 для 3 символов - это поиск в строке par запятой, которая не существует, поэтому возвращаемый индекс равен -1, следовательно, ваша ошибкаЯ думаю, что вам нужно использовать некоторую рекурсию:

Dim testString As String = "part, description, order, get this text"
Dim index As Int32 = 0

For i As Int32 = 1 To 3    
  index = testString.IndexOf(","c, index + 1)
  If index < 0 Then
    ' Not enough commas. Handle this.
  End If
Next
Dim result As String = testString.Substring(index + 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...