Удалить все пробелы из строки

Как удалить все пробелы из строки? Я могу придумать некоторые очевидные методы, такие как цикл по строке и удаление каждого символа пробела или использование регулярных выражений, но эти решения не такие выразительные или эффективные. Каков простой и эффективный способ удалить все пробелы из строки?

Используйте \s+ заменить ничем. inclusion of the 'regex' crate, ...

user557597 16.07.2019 21:00

Я думаю, это хороший вопрос. Это не дубликат (ближайшим является stackoverflow.com/q/37792471/1896169 , который, как вы могли бы утверждать, является дубликатом, но его явно трудно найти, если вы ищете термины в этом вопросе), и, по крайней мере, это четкий, конкретный проблема. Кроме того, это определенно не «слишком широко». Это очень четко определенная проблема, и единственная проблема.

Justin 16.07.2019 21:55

@Justin Все еще выглядит как запрос кода, это тривиальный вопрос, на него ответит любой базовый поиск, я думаю, мы могли бы даже закрыть как дубликат stackoverflow.com/questions/37792471/….

Stargateur 16.07.2019 23:00

@Justin Мы обычно ожидаем большего количества исследований, прежде чем спрашивать. Во-первых, поиск только в стандартной библиотеке для replace возвращает std::str::replace в качестве третьей записи, что также хорошо справилось бы со своей задачей. Это тот вопрос, который вполне может стать полезным, но ему просто нужно будет доказать свою полезность со временем.

E_net4 16.07.2019 23:17

@Stargateur Я очень не согласен. Базовые поиски по удалению пробелов из строки, удалению пробелов из строки и т. д. не дают ничего полезного для Rust. Вы получаете другие высоко оцененные вещи для других языков, но не для Rust.

Justin 16.07.2019 23:30

@E_net4isoutofcommentflags Вынужден не согласиться. Откуда вы знаете, что нужно искать «заменить»? Эта операция, очевидно, не является заменой; это стирание/удаление. Когда я провел базовое исследование этого вопроса, я нашел вопрос C# с большим количеством голосов, что практически одно и то же. Единственный способ, которым я смог получить полезные результаты для Rust, заключался в том, чтобы знать, какие термины удалять из поиска и какие похожие вещи искать — на этом уровне новый вопрос о переполнении стека вполне уместен.

Justin 16.07.2019 23:33

@Stargateur Я искал, прежде чем спрашивать, и я спросил специально, потому что не было хорошего, четко определенного ответа для Rust. Кроме того, я считаю, что со временем этот вопрос может стать сравнением между различными методами, если существует много хороших ответов.

Magix 16.07.2019 23:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
27
7
16 753
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Если вы хотите изменить 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 из итератора символов, но это будет единственное распределение в любом случае.

E_net4 17.07.2019 10:12
play.rust-lang.org/…
hellow 17.07.2019 10:43

На самом деле я нашел более короткий подход

fn no_space(x : String) -> String{
  x.replace(" ", "")
}

Хороший ! Однако это работает только с обычными пробелами. На практике существует ряд пробельных символов, которые хотелось бы удалить, которые можно найти с помощью is_whitespace().

Magix 05.01.2021 17:43

Изначально я думал, что мы должны использовать одинарные кавычки. Разве пробел не является символом?

sreenivas 05.10.2021 11:45

Другие вопросы по теме