Как удалить все пробелы из строки? Я могу придумать некоторые очевидные методы, такие как цикл по строке и удаление каждого символа пробела или использование регулярных выражений, но эти решения не такие выразительные или эффективные. Каков простой и эффективный способ удалить все пробелы из строки?
Я думаю, это хороший вопрос. Это не дубликат (ближайшим является stackoverflow.com/q/37792471/1896169 , который, как вы могли бы утверждать, является дубликатом, но его явно трудно найти, если вы ищете термины в этом вопросе), и, по крайней мере, это четкий, конкретный проблема. Кроме того, это определенно не «слишком широко». Это очень четко определенная проблема, и единственная проблема.
@Justin Все еще выглядит как запрос кода, это тривиальный вопрос, на него ответит любой базовый поиск, я думаю, мы могли бы даже закрыть как дубликат stackoverflow.com/questions/37792471/….
@Justin Мы обычно ожидаем большего количества исследований, прежде чем спрашивать. Во-первых, поиск только в стандартной библиотеке для replace возвращает std::str::replace в качестве третьей записи, что также хорошо справилось бы со своей задачей. Это тот вопрос, который вполне может стать полезным, но ему просто нужно будет доказать свою полезность со временем.
@Stargateur Я очень не согласен. Базовые поиски по удалению пробелов из строки, удалению пробелов из строки и т. д. не дают ничего полезного для Rust. Вы получаете другие высоко оцененные вещи для других языков, но не для Rust.
@E_net4isoutofcommentflags Вынужден не согласиться. Откуда вы знаете, что нужно искать «заменить»? Эта операция, очевидно, не является заменой; это стирание/удаление. Когда я провел базовое исследование этого вопроса, я нашел вопрос C# с большим количеством голосов, что практически одно и то же. Единственный способ, которым я смог получить полезные результаты для Rust, заключался в том, чтобы знать, какие термины удалять из поиска и какие похожие вещи искать — на этом уровне новый вопрос о переполнении стека вполне уместен.
@Stargateur Я искал, прежде чем спрашивать, и я спросил специально, потому что не было хорошего, четко определенного ответа для Rust. Кроме того, я считаю, что со временем этот вопрос может стать сравнением между различными методами, если существует много хороших ответов.





Если вы хотите изменить String, используйте retain. Это, вероятно, самый быстрый способ, когда он доступен.
fn remove_whitespace(s: &mut String) {
s.retain(|c| !c.is_whitespace());
}
Если вы не можете изменить его, потому что он вам все еще нужен или у вас есть только &str, вы можете использовать фильтр и создать новый String. Это, конечно, придется выделить, чтобы сделать String.
fn remove_whitespace(s: &str) -> String {
s.chars().filter(|c| !c.is_whitespace()).collect()
}
Хороший вариант — использовать split_whitespace, а затем собрать в строку:
fn remove_whitespace(s: &str) -> String {
s.split_whitespace().collect()
}
@Magix split_whitespace не потребляет строку, поэтому правильно сделать так, чтобы функция получала фрагмент строки. collect создаст String из итератора символов, но это будет единственное распределение в любом случае.
На самом деле я нашел более короткий подход
fn no_space(x : String) -> String{
x.replace(" ", "")
}
Хороший ! Однако это работает только с обычными пробелами. На практике существует ряд пробельных символов, которые хотелось бы удалить, которые можно найти с помощью is_whitespace().
Изначально я думал, что мы должны использовать одинарные кавычки. Разве пробел не является символом?
Используйте
\s+заменить ничем.inclusion of the 'regex' crate, ...