Как извлечь диапазон символов из строки - PullRequest
3 голосов
/ 04 февраля 2012

Если у меня есть строка, такая как:

 String myString = "SET(someRandomName, \"hi\", u)"; 

где я знаю, что "SET(" всегда будет существовать в строке, но длина "someRandomName" неизвестна, как мне удалить все символы из "(" до первого экземпляра """? Итак, чтобы повторить, я хотел бы удалить эту подстроку: "SET(someRandomName, \"" из myString.

Как бы я это сделал в C # .Net?

РЕДАКТИРОВАТЬ: я не хочу использовать регулярное выражение для этого.

Ответы [ 3 ]

7 голосов
/ 04 февраля 2012

Если строка будет всегда иметь такую ​​структуру, проще всего использовать String.IndexOf() для поиска индекса первого вхождения ". String.Substring() затем дает вам соответствующую часть исходной строки.

Аналогично, вы можете использовать String.LastIndexOf(), чтобы найти индекс первого " от конца строки. Тогда вы сможете извлечь только значение второго аргумента ("hi" в вашем примере).

В итоге вы получите что-то вроде этого:

int begin = myString.IndexOf('"');
int end = myString.LastIndexOf('"');
string secondArg = myString.Substring(begin, end - begin + 1);

Это даст "\"hi\"" в secondArg.

ОБНОВЛЕНИЕ : Чтобы удалить часть строки, используйте метод String.Remove():

int begin = myString.IndexOf('(');
int end = myString.IndexOf('"');
string altered = myString.Remove(begin + 1, end - begin - 1);

Это даст "SET(\"hi\", u)" в altered.

1 голос
/ 04 февраля 2012

Это довольно ужасно, но это достигнет того, что вы хотите, с помощью простого оператора linq.Просто представляя в качестве альтернативы IndexOf ответы.

string myString = "SET(someRandomName, \"hi\", 0)";
string fixedStr = new String( myString.ToCharArray().Take( 4 ).Concat( myString.ToCharArray().SkipWhile( c => c != '"' ) ).ToArray() );

выход: SET ("привет", 0)

Примечание: пропуск жестко закодирован для 4 символов, выможет изменить его, чтобы пропустить символы в массиве, который содержит их.

1 голос
/ 04 февраля 2012

Я полагаю, вы хотите преобразовать

SET(someRandomName, "hi", u)

в

SET(u)

Для этого вы можете использовать:

String newString = "SET(" + myString.Substring(myString.LastIndexOf(',') + 1).Trim();

Чтобы объяснить это постепенно:

myString.LastIndexOf(',') 

даст вам индекс (позицию) вашего последнего , символа. Увеличьте его на 1, чтобы получить начальный индекс третьего аргумента в вашей функции SET.

myString.Substring(myString.LastIndexOf(',') + 1)

Метод Substring удаляет все символы до указанной позиции. В этом случае мы исключаем все до (и включая) последнего ,. В приведенном выше примере это исключило бы часть SET(someRandomName, "hi", и оставило бы нам u).

Trim необходимо просто удалить начальный пробел перед вашим u.

Наконец, мы добавляем SET( к нашей подстроке (так как мы ранее удалили ее из-за нашего Substring).

Редактировать : На основании вашего комментария ниже (что противоречит тому, что вы задали в своем вопросе) , вы можете использовать:

String newString = "SET(" + myString.Substring(myString.IndexOf(',') + 1).Trim();
...