Как я могу извлечь префикс строки, который стоит перед данным символом?

avatar
savx2
9 августа 2021 в 00:19
186
2
2

Есть ли способ извлечь префикс, определяемый символом, без использования split? Например, учитывая «некоторый текст | больше текста», как я могу извлечь «некоторый текст», который является строкой, которая идет перед «|»?

Источник
kmdreko
9 августа 2021 в 00:33
2

Почему нет split? .split('|').next(), вероятно, самый прямой способ получить "some-text" из вашего ввода.

Ответы (2)

avatar
Todd
9 августа 2021 в 00:30
1

Сплит может быть лучшим способом. Но если по какой-то причине вы хотите сделать это без .split(), вот пара альтернатив.

Вы можете использовать итератор .chars(), связанный с .take_while(), а затем создать строку с .collect().

// pfx will be "foo".
let pfx = "foo|bar".chars()
                   .take_while(|&ch| ch != '|')
                   .collect::<String>();

Еще один способ, который довольно эффективен, но подвержен ошибкам, заключается в создании фрагмента оригинала str:

let s   = "foo|bar";
let pfx = &s[..s.find('|').unwrap()];

// or - if used in a function/closure that returns an `Option`.
let pfx = &s[..s.find('|')?];

avatar
Kornel
10 августа 2021 в 18:57
2

Если ваша проблема с split заключается в том, что он также может разделить остальную часть строки, тогда рассмотрите str.splitn(2, '|'), который разбивается максимум на две части, поэтому вы получаете строку до первого |, а затем остальную часть строка, даже если она содержит другие символы |.