首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从字符串中删除空白字符集,不包括空格

从字符串中删除空白字符集,不包括空格
EN

Stack Overflow用户
提问于 2014-11-17 07:33:42
回答 5查看 19.4K关注 0票数 17

如何从字符串中删除空格字符集,但保留单词之间的单个空格?我想删除两个空格和三个空格,等等。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-11-17 10:11:38

Swift 3

代码语言:javascript
复制
extension String {
    func condensingWhitespace() -> String {
        return self.components(separatedBy: .whitespacesAndNewlines)
            .filter { !$0.isEmpty }
            .joined(separator: " ")
    }
}

let string = "  Lorem   \r  ipsum dolar   sit  amet. "
print(string.condensingWhitespace())
// Lorem ipsum dolar sit amet.

传统Swift

NSCharacterSet让这一切变得很简单:

代码语言:javascript
复制
func condenseWhitespace(string: String) -> String {
    let components = string.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).filter({!isEmpty($0)})
    return join(" ", components)
}

var string = "  Lorem   \r  ipsum dolar   sit  amet. "
println(condenseWhitespace(string))
// Lorem ipsum dolar sit amet.

或者,如果您想将其作为String扩展:

代码语言:javascript
复制
extension String {
    func condenseWhitespace() -> String {
        let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).filter({!Swift.isEmpty($0)})
        return " ".join(components)
    }
}

var string = "  Lorem   \r  ipsum dolar   sit  amet. "
println(string.condenseWhitespace())
// Lorem ipsum dolar sit amet.

都归功于NSHipster post on NSCharacterSet

票数 50
EN

Stack Overflow用户

发布于 2015-10-12 19:50:13

Swift 2兼容代码:

代码语言:javascript
复制
extension String {
    var removeExcessiveSpaces: String {
        let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
        let filtered = components.filter({!$0.isEmpty})
        return filtered.joinWithSeparator(" ")
    }
}

用法:

代码语言:javascript
复制
let str = "test  spaces    too many"
print(str.removeExcessiveSpaces)
// Output: test spaces too many
票数 11
EN

Stack Overflow用户

发布于 2015-12-19 21:20:29

当您有Objective-C/Foundation背景时,将componentsSeparatedByCharactersInSet(:)与Swift结合使用以将字符串从冗余的空格字符中剪裁出来似乎是显而易见的。

这里的步骤是从字符串中获取一个String数组,其中所有空格字符都已被空字符串替换,将此数组过滤到一个新的String数组中,其中所有空字符串都已被删除,并将此数组中的所有字符串连接到一个新字符串中,同时使用空格字符将它们分开。

以下Playground代码显示了如何执行此操作:

代码语言:javascript
复制
import Foundation

let string = "  Lorem   ipsum dolar   sit  amet. "

let newString = string
.componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
.filter { !$0.isEmpty }
.joinWithSeparator(" ") 

print(newString) // prints "Lorem ipsum dolar sit amet."

如果需要重复此操作,可以将代码重构为String扩展:

代码语言:javascript
复制
import Foundation

extension String {
    func condenseWhitespace() -> String {
        return componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
            .filter { !$0.isEmpty }
            .joinWithSeparator(" ")
    }
}

let string = "  Lorem   ipsum dolar   sit  amet. "
let newString = string.condenseWhitespace()

print(newString) // prints "Lorem ipsum dolar sit amet."

然而,对于Swift,还有另一种真正有效的方法,它不需要您导入Foundation

这里的步骤是从字符串中获取一个String.CharacterView数组,其中所有空格字符都已删除,将此String.CharacterView数组映射到一个String数组,并将此数组中的所有字符串连接到一个新字符串中,同时使用空格字符将它们分开。

以下Playground代码显示了如何执行此操作:

代码语言:javascript
复制
let string = "  Lorem   ipsum dolar   sit  amet. "

let newString = string.characters
    .split { $0 == " " }
    .map { String($0) }
    .joinWithSeparator(" ")

print(newString) // prints "Lorem ipsum dolar sit amet."

如果需要重复此操作,可以将代码重构为String扩展:

代码语言:javascript
复制
extension String {
    func condenseWhitespace() -> String {
        return characters
            .split { $0 == " " }
            .map { String($0) }
            .joinWithSeparator(" ")
    }
}

let string = "  Lorem   ipsum dolar   sit  amet. "
let newString = string.condenseWhitespace()

print(newString) // prints "Lorem ipsum dolar sit amet."
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26963379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档