如何从字符串中删除所有前导空格?- Swift

218
我需要一种方法来移除字符串中的第一个字符,该字符是空格。我正在寻找一种方法,甚至是String类型的扩展,可以用于从字符串中删除一个字符。

8
你想要移除字符串中的第一个空格字符还是_所有_空格字符? - Alex
1
可能是重复的问题:从字符串中删除空格字符集,但保留空格 - Imanou Petit
32个回答

7

如果您想删除字符串前面(和后面)的空格,但不删除中间的空格,您应该使用 stringByTrimmingCharactersInSet

    let dirtyString   = " First Word "
    let cleanString = dirtyString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

如果您想从字符串中的任何位置删除空格,那么您可能需要查看stringByReplacing...

如何同时移除中间的空格? - Nikhil Gupta
@NikhilGupta 不,只有前导和尾随空格被删除(例如,“First Word”输出“First Word”)。 - fpg1503

5

少写代码,多做事。

"Hello World".filter({$0 != " "}) // HelloWorld

5

以下是另一种解决方案,有时输入的字符串单词之间可能包含多个空格。如果您需要标准化为单词之间只有1个空格,请尝试此方法(Swift 4/5)

let inputString = "  a very     strange   text !    "
let validInput = inputString.components(separatedBy:.whitespacesAndNewlines).filter { $0.count > 0 }.joined(separator: " ")

print(validInput) // "a very strange text !"

4

尝试使用函数式编程来删除空格:

extension String {
  func whiteSpacesRemoved() -> String {
    return self.filter { $0 != Character(" ") }
  }
}

4

你好,可能有些晚了,但还是值得一试。这是从一个“playground”文件中提取的。你可以将它制作成字符串扩展。

这是使用 Swift 5.3 写的。

方法1:

var str = "\n \tHello, playground       "
if let regexp = try? NSRegularExpression(pattern: "^\\s+", options: NSRegularExpression.Options.caseInsensitive) {
    let mstr = NSMutableString(string: str)
    regexp.replaceMatches(in: mstr, options: [], range: NSRange(location: 0, length: str.count), withTemplate: "")
    str = mstr as String
}

Result: "Hello, playground       "

方法二:

if let c = (str.first { !($0 == " " || $0 == "\t" || $0 == "\n") }) {
    if let nonWhiteSpaceIndex = str.firstIndex(of: c) {
        str.replaceSubrange(str.startIndex ..< nonWhiteSpaceIndex, with: "")
    }
}

Result: "Hello, playground       "

这是针对 Swift 5.x 的。 - Kyle Emmanuel
这太棒了!谢谢 - RJ Uy

3
如果有人需要从字符串中删除额外的空格,例如:"This is the demo text remove extra space between the words.",您可以在Swift 4中使用此函数。
func removeSpace(_ string: String) -> String{
    var str: String = String(string[string.startIndex])
    for (index,value) in string.enumerated(){
        if index > 0{
            let indexBefore = string.index(before: String.Index.init(encodedOffset: index))
            if value == " " && string[indexBefore] == " "{
            }else{
                str.append(value)
            }
        }
    }
    return str
}

并且结果将会是:
"This is the demo text remove extra space between the words."

3
extension String {

    var removingWhitespaceAndNewLines: String {
        return removing(.whitespacesAndNewlines)
    }

    func removing(_ forbiddenCharacters: CharacterSet) -> String {
        return String(unicodeScalars.filter({ !forbiddenCharacters.contains($0) }))
    }
}

3
你也可以试试这个。
   let updatedString = searchedText?.stringByReplacingOccurrencesOfString(" ", withString: "-")

仅适用于“ ”(不考虑其他类型的空格)。 - fpg1503

2

好的,这个问题很旧了,但我自己也遇到过这个问题,除了删除所有空格(这可能会损害应用程序的功能)之外,上面的答案都没有起作用。我的问题如下:

["This", " is", " my", " array", " it is awesome"]

如果剪切所有的空格,这将是输出结果:
["This", "is", "my", "array", "itisawesome"]

所以我需要消除前导空格,并从以下方式简单切换:
 let array = jsonData.components(separatedBy: ",")

To

let array = jsonData.components(separatedBy: ", ")

问题已经解决。希望将来有人能从中受益。


2

在 Swift 4 中去除空格

let strFirstName = txtFirstName.text?.trimmingCharacters(in: 
 CharacterSet.whitespaces)

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