我需要一种方法来删除字符串的第一个字符,这是一个空格。我正在寻找一个方法,甚至是一个扩展的字符串类型,我可以用来削减字符串的字符。


当前回答

string = string.filter ({!" ".contains($0) })

其他回答

快速解决方案:

用法:

let txt = "        hello world     "
let txt1 = txt.trimStart() // "hello world     "
let txt2 = txt.trimEnd()   // "        hello world"

用法二:

let txt = "rr rrr rrhello world r r r r r r"
let txt1 = txt.trimStart(["r", " "]) // "hello world r r r r r r"
let txt2 = txt.trimEnd(["r", " "])   // "rr rrr rrhello world"

如果你需要移除字符串中的所有空白:

txt.replace(of: " ", to: "")
public extension String {
    func trimStart(_ char: Character) -> String {
        return trimStart([char])
    }
    
    func trimStart(_ symbols: [Character] = [" ", "\t", "\r", "\n"]) -> String {
        var startIndex = 0
        
        for char in self {
            if symbols.contains(char) {
                startIndex += 1
            }
            else {
                break
            }
        }
        
        if startIndex == 0 {
            return self
        }
        
        return String( self.substring(from: startIndex) )
    }
    
    func trimEnd(_ char: Character) -> String {
        return trimEnd([char])
    }
    
    func trimEnd(_ symbols: [Character] = [" ", "\t", "\r", "\n"]) -> String {
        var endIndex = self.count - 1
        
        for i in (0...endIndex).reversed() {
            if symbols.contains( self[i] ) {
                endIndex -= 1
            }
            else {
                break
            }
        }
        
        if endIndex == self.count {
            return self
        }
        
        return String( self.substring(to: endIndex + 1) )
    }
}

/////////////////////////
/// ACCESS TO CHAR BY INDEX
////////////////////////
extension StringProtocol {
    subscript(offset: Int) -> Character { self[index(startIndex, offsetBy: offset)] }
    subscript(range: Range<Int>) -> SubSequence {
        let startIndex = index(self.startIndex, offsetBy: range.lowerBound)
        return self[startIndex..<index(startIndex, offsetBy: range.count)]
    }
    subscript(range: ClosedRange<Int>) -> SubSequence {
        let startIndex = index(self.startIndex, offsetBy: range.lowerBound)
        return self[startIndex..<index(startIndex, offsetBy: range.count)]
    }
    subscript(range: PartialRangeFrom<Int>) -> SubSequence { self[index(startIndex, offsetBy: range.lowerBound)...] }
    subscript(range: PartialRangeThrough<Int>) -> SubSequence { self[...index(startIndex, offsetBy: range.upperBound)] }
    subscript(range: PartialRangeUpTo<Int>) -> SubSequence { self[..<index(startIndex, offsetBy: range.upperBound)] }
}

斯威夫特3

你可以简单地使用这个方法删除字符串中的所有普通空格(不考虑所有类型的空白):

let myString = " Hello World ! "
let formattedString = myString.replacingOccurrences(of: " ", with: "")

结果将是:

HelloWorld!

关于Swift 3.0+,请参阅其他答案。这是Swift 2.x现在的一个遗留答案

如上所述,由于你对删除第一个字符感兴趣,.stringByTrimmingCharactersInSet()实例方法将很好地工作:

myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

你也可以让你自己的字符集来修剪你的字符串的边界,例如:

myString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>"))

还有一个内置的实例方法来处理删除或替换子字符串,称为stringByReplacingOccurrencesOfString(目标:字符串,替换:字符串)。它可以删除字符串中任何地方出现的空格或任何其他模式

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

myString.stringByReplacingOccurrencesOfString(" ", withString: "")

这是一种简单的方法,可以删除或替换字符串中任何重复的字符模式,并且可以被链接,尽管每次遍历它都必须再次遍历整个字符串,从而降低了效率。所以你可以这样做:

 myString.stringByReplacingOccurrencesOfString(" ", withString: "").stringByReplacingOccurrencesOfString(",", withString: "")

...但要花两倍的时间。

.stringByReplacingOccurrencesOfString()文档来自苹果网站

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

("\(myNSDataBlob)").stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>")).stringByReplacingOccurrencesOfString(" ", withString: "")

好吧,这是老问题了,但我自己也遇到过这个问题,除了删除所有空白之外,上面的答案都不起作用,这可能会损害应用的功能。我的问题是这样的:

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

如果修剪所有的空白,这将是输出:

["This", "is", "my", "array", "itisawesome"]

所以我需要消除前导间距,并简单地从:

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

To

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

修正了这个问题。希望将来有人发现这个有用。

Swift 4、4.2和5

仅从前端和尾部移除空间

let str = "  Akbar Code  "
let trimmedString = str.trimmingCharacters(in: .whitespacesAndNewlines)

从字符串中的每一个地方删除空格

let stringWithSpaces = " The Akbar khan code "
let stringWithoutSpaces = stringWithSpaces.replacingOccurrences(of: " ", with: "")