从字符串中移除所有空格

41

如何从字符串中删除所有空格?我可以想到一些明显的方法,比如循环遍历字符串并删除每个空格字符,或者使用正则表达式,但这些解决方案不够简洁高效。有什么简单而高效的方法可以从字符串中删除所有空格?


5
我认为这是一个好问题。这不是重复的(最接近的是https://dev59.com/t1oU5IYBdhLWcg3wIkaI,你可以争辩说这是重复的,但是如果你搜索这个问题中的术语,显然很难找到这个问题),至少它是一个明确、具体的问题。此外,这绝对不是“范围过大”的问题。这是一个非常清楚定义的问题,而且只有一个问题。 - Justin
1
@Justin 在提问之前,我们通常期望有更多的研究。例如,在标准库中仅搜索replace就可以返回第三个条目std::str::replace,它也可以很好地完成工作。这是一种可能会变得有用的问题,但需要时间来证明其有用性。 - E net4
4
我非常不同意。关于在 Rust 中删除字符串中的空格、抹去字符串中的空格等基本搜索并没有找到任何有用的信息。你会得到其他语言高度投票的答案,但是对于 Rust 来说却没有。 - Justin
2
@E_net4isoutofcommentflags 我不同意。你怎么知道要搜索“replace”?这个操作并不明显是一个替换;它是一个擦除/删除。当我为这个问题做基础研究时,我发现了这个高赞的C#问题,它几乎是一样的。我能够找到有用的Rust结果的唯一方法是知道从搜索中删除哪些术语以及搜索哪些类似的东西---在那个层面上,一个新的Stack Overflow问题是完全合适的。 - Justin
2
@Stargateur 我在提问之前进行了搜索,并且之所以提问是因为对于 Rust 来说没有一个好的、明确定义的答案。此外,如果存在许多好的答案,我相信随着时间的推移,这个问题可能会成为不同方法之间的比较。 - Magix
显示剩余2条评论
5个回答

50

如果您想修改String,请使用retain。这可能是可用时最快的方法。

fn remove_whitespace(s: &mut String) {
    s.retain(|c| !c.is_whitespace());
}

如果因为你仍然需要它或者只有一个&str而无法修改它,那么可以使用 filter 并创建一个新的String。当然,这将需要分配内存来创建 String

fn remove_whitespace(s: &str) -> String {
    s.chars().filter(|c| !c.is_whitespace()).collect()
}

23
一个好的选择是使用split_whitespace函数然后将其收集到一个字符串中:
fn remove_whitespace(s: &str) -> String {
    s.split_whitespace().collect()
}

3
@Magix split_whitespace不会消耗字符串,因此将函数接收一个字符串切片是正确的做法。collect将从字符迭代器创建一个String,但这将是任何一种方式中唯一的分配。 - E net4

4

实际上,我找到了一个更简洁的方法。

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

7
好的!不过这个只适用于普通空格字符。实际上,人们希望删除一些空白字符,可以使用is_whitespace()函数来找到它们。 - Magix
最初我认为应该使用单引号。空格不是一个字符吗? - sreenivas
@sreenivas,replace函数替换的不是单个字符,而是一个字符串中的另一个字符串,因此我们在这里使用双引号。 - frogstair

3
如果您使用夜间版,您可以使用 remove_matches() 方法。
#![feature(string_remove_matches)]

fn remove_whitespace(s: &mut String) {
    s.remove_matches(char::is_whitespace);
}

有些令人惊讶的是,根据我进行的(非常不精确的)小型基准测试,它始终比retain()更快。


1
您可以使用trim()函数来去除空格、制表符和换行符等空白字符。
fn remove_space(data: &str) {
    for word in data.split(",") {
        println!("{:?}", word.trim());
    }
}

这里是关于playground的完整示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接