как извлечь подстроку из строки неопределенной длины?

#c# #string

#c# #строка

Вопрос:

Подстройте эти строки:-

 1. ZZ111122
2. ZZZZ222111
3. ZZZZZZZ333
4. ZZZ111333
  

У меня есть такие строки. Это значение всегда начинается с Z. И после Z всегда либо 1, либо 2, либо 3. Но я не знаю количество символов Z в строке. Итак, как я могу извлечь все Z из строки

Комментарии:

1. Возможно, под извлечением вы подразумеваете «удалить»?

2. Каков ожидаемый результат? Например, строка 1: вам нужна строка типа «ZZ»? или может быть «111122»?

Ответ №1:

Я не знаю, правильно ли я понял. Если у вас есть «ZZZZ222111» и вам нужно только «222111», сделайте это:

 string test = "ZZZZ222111";
test = test.Substring(test.LastIndexOf("Z")   1);
  

Если вы хотите только «ZZZZ», сделайте это:

 string test = "ZZZZ222111";
test = test.Substring(0, test.LastIndexOf("Z"));
  

Оба способа очень просты. Нет необходимости в циклах или регулярных выражениях.

Комментарии:

1. 1 За более полное и в то же время более простое решение.

Ответ №2:

Похоже, вы захотите использовать для этого регулярные выражения.

Ответ №3:

Используйте String.Функция Trim:

 ZeroZValue = stringValue.Trim('Z');
  

Комментарии:

1. Trim() удаляет символы как из начала, так и из конца строки. Я бы предложил TrimStart() вместо этого.

2. @svick: Он четко заявил, что у него нет ничего, кроме 1, 2 или 3 после букв z..

3. да, но использование TrimStart() делает намерение более ясным и, вероятно, будет быстрее.

Ответ №4:

 String test = "ZZ111122";
String zOnly = test.Substring(0, test.IndexOfAny("123".ToCharArray()));
  

Воспользуйтесь IndexOfAny() . Я предполагаю, что вы хотите, чтобы остались только Z («извлечь все Z из строки»).

Комментарии:

1. Будьте осторожны: при IndexOf поиске одного символа в тексте IndexOfAny выполняется поиск нескольких символов в тексте, что, безусловно, менее эффективно. Хотя это и очень полезно несколько раз, это не обязательно для нужд операционной системы.

2. @ErickPetru: Верно, но в OP не было указано никаких требований к производительности.

3. Конечно, тогда OP выбирает ответ с низкой производительностью только из-за этого. Фактически, также выбирается ответ, который не работает полностью, поскольку ваш IndexOfAny является строковым методом, поэтому код должен быть: String zOnly = test.Substring(0, test.IndexOfAny("123".ToCharArray())); . Наконец, принятый ответ набрал всего 0 голосов. Как насчет ее чтения: Как работает принятие ответа?

4. Очевидно, выбор наилучшего ответа не был обычной практикой здесь, в StackOverflow. За несколько дней здесь я уже разобрался с этим. Поздравляю с назначением на чтение!

Ответ №5:

Это не сложно. Я рекомендую обрабатывать текст построчно.

Вы можете перебирать строку символ за символом. Вы можете использовать регулярные выражения. Или вы могли бы использовать мой класс замены sscanf() для C #.

Ответ №6:

 int start = someString.IndexOf("Z");
int end = someString.LastIndexOf("Z");
someString.Substring(start , end - start);