我该如何从字符串中删除所有前导空格? - 迅速

dhr*_*uvm 159 string swift

我需要一种方法来从字符串中删除第一个字符,这是一个空格.我正在寻找一种方法,甚至是String类型的扩展,我可以使用它来剪切字符串的字符.

Ale*_*lex 348

要删除前导和尾随空格:

let trimmedString = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
Run Code Online (Sandbox Code Playgroud)

Swift 3/Swift 4:

let trimmedString = string.trimmingCharacters(in: .whitespaces)
Run Code Online (Sandbox Code Playgroud)

  • 这只适用于前导和尾随空格.这不会删除字符串中包含的空格. (170认同)
  • 如果你想删除所有空格,你可以尝试myString.stringByReplacingOccurrencesOfString("",withString:"") (81认同)
  • 如果你想修剪换行符,你也可以使用`NSCharacterSet.whitespaceAndNewlineCharacterSet()`. (6认同)
  • 要使它与Swift 3.0一起使用并删除字符串之间的空格,请使用答案:http://stackoverflow.com/a/39067610/4886069 (2认同)
  • Swift 3+ 用户: yourString.replacingOccurrences(of: " ", with: "") (2认同)

fpg*_*503 139

想要删除所有类型的空格(基于此SO答案)的正确方法是:

extension String {
    var stringByRemovingWhitespaces: String {
        let components = componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
        return components.joinWithSeparator("")
    }
}
Run Code Online (Sandbox Code Playgroud)

Swift 3.0+(3.0,3.1,3.2,4.0)

extension String {
    func removingWhitespaces() -> String {
        return components(separatedBy: .whitespaces).joined()
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

当问题是关于删除所有空格时,这个答案被发布了,问题被编辑为仅提及前导空格.如果您只想删除前导空格,请使用以下命令:

extension String {
    func removingLeadingSpaces() -> String {
        guard let index = firstIndex(where: { !CharacterSet(charactersIn: String($0)).isSubset(of: .whitespaces) }) else {
            return self
        }
        return String(self[index...])
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 对于新行也有.components(separatedBy:.whitespacesAndNewlines) (5认同)
  • @JakubTruhlář - 这是一个意见问题,而不是事实陈述.请参阅https://softwareengineering.stackexchange.com/questions/304077/swift-functions-vs-computed-properties (4认同)

Bad*_*Cat 80

此String扩展从字符串中删除所有空格,而不仅仅是尾随空格...

 extension String {
    func replace(string:String, replacement:String) -> String {
        return self.replacingOccurrences(of: string, with: replacement, options: NSString.CompareOptions.literal, range: nil)
    }

    func removeWhitespace() -> String {
        return self.replace(string: " ", replacement: "")
    }
  }
Run Code Online (Sandbox Code Playgroud)

例:

let string = "The quick brown dog jumps over the foxy lady."
let result = string.removeWhitespace() // Thequickbrowndogjumpsoverthefoxylady.
Run Code Online (Sandbox Code Playgroud)

  • 仅适用于""(不考虑其他类型的whitesapce) (4认同)

Myk*_*huk 43

斯威夫特3

您可以简单地使用此方法删除字符串中的所有常规空格(不考虑所有类型的空格):

let myString = " Hello World ! "
let formattedString = myString.replacingOccurrences(of: " ", with: "")
Run Code Online (Sandbox Code Playgroud)

结果将是:

HelloWorld!
Run Code Online (Sandbox Code Playgroud)


moh*_*ish 18

你也可以使用正则表达式.

let trimmedString = myString.stringByReplacingOccurrencesOfString("\\s", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: nil)
Run Code Online (Sandbox Code Playgroud)


Wat*_*rds 16

对于Swift 3.0+,请参阅其他答案.这是Swift 2.x的传统答案

如上所述,由于您有兴趣删除第一个字符,因此.stringByTrimmingCharactersInSet()实例方法可以很好地工作:

myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
Run Code Online (Sandbox Code Playgroud)

您还可以创建自己的字符集来修剪字符串的边界,例如:

myString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>"))
Run Code Online (Sandbox Code Playgroud)

还有一个内置实例方法来处理删除或替换名为stringByReplacingOccurrencesOfString(target:String,replacement:String)的字符串.它可以删除字符串中任何位置出现的空格或任何其他模式

您可以指定选项和范围,但不需要:

myString.stringByReplacingOccurrencesOfString(" ", withString: "")
Run Code Online (Sandbox Code Playgroud)

这是一种简单的方法来删除或替换字符串中任何重复的字符模式,并且可以链接,但每次通过它都需要再次通过整个字符串,从而降低效率.所以你可以这样做:

 myString.stringByReplacingOccurrencesOfString(" ", withString: "").stringByReplacingOccurrencesOfString(",", withString: "")
Run Code Online (Sandbox Code Playgroud)

......但需要两倍的时间.

Apple网站上的.stringByReplacingOccurrencesOfString()文档

链接这些String实例方法有时可以非常方便地进行一次转换,例如,如果要将一个简短的NSData blob转换为一行中没有空格的十六进制字符串,可以使用Swift的内置字符串插值和一些修剪和更换:

("\(myNSDataBlob)").stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>")).stringByReplacingOccurrencesOfString(" ", withString: "")
Run Code Online (Sandbox Code Playgroud)


Dha*_*esh 12

对于swift 3.0

import Foundation

var str = " Hear me calling"

extension String {
    var stringByRemovingWhitespaces: String {
        return components(separatedBy: .whitespaces).joined()
    }
}

str.stringByRemovingWhitespaces  // Hearmecalling
Run Code Online (Sandbox Code Playgroud)


Akb*_*han 9

斯威夫特 4、4.2 和 5

仅从前端和后端删除空间

let str = "  Akbar Code  "
let trimmedString = str.trimmingCharacters(in: .whitespacesAndNewlines)
Run Code Online (Sandbox Code Playgroud)

从字符串中的每个位置删除空格

let stringWithSpaces = " The Akbar khan code "
let stringWithoutSpaces = stringWithSpaces.replacingOccurrences(of: " ", with: "")
Run Code Online (Sandbox Code Playgroud)


dim*_*iax 8

斯威夫特4

使用正则表达式的优秀案例:

" this is    wrong contained teee xt     "
    .replacingOccurrences(of: "^\\s+|\\s+|\\s+$", 
                          with: "", 
                          options: .regularExpression)

// thisiswrongcontainedteeext
Run Code Online (Sandbox Code Playgroud)


Jea*_*let 7

我会使用这个扩展,灵活地模仿其他集合如何做到这一点:

extension String {
    func filter(pred: Character -> Bool) -> String {
        var res = String()
        for c in self.characters {
            if pred(c) {
                res.append(c)
            }
        }
        return res
    }
}

"this is a String".filter { $0 != Character(" ") } // "thisisaString"
Run Code Online (Sandbox Code Playgroud)


Jer*_*ope 6

如果您想要从前面(和后面)而不是中间删除空格,您应该使用 stringByTrimmingCharactersInSet

    let dirtyString   = " First Word "
    let cleanString = dirtyString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
Run Code Online (Sandbox Code Playgroud)

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


Duy*_*Hoa 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 !"
Run Code Online (Sandbox Code Playgroud)


小智 5

更少的代码做更多的事情。

"Hello World".filter({$0 != " "}) // HelloWorld
Run Code Online (Sandbox Code Playgroud)