#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);