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


当前回答

从技术上讲,这不是对原始问题的回答,但由于这里的许多帖子都给出了删除所有空白的答案,这里是一个更新的、更简洁的版本:

let stringWithouTAnyWhitespace = string.filter {!$0.isWhitespace}

其他回答

你也可以试试这个

   let updatedString = searchedText?.stringByReplacingOccurrencesOfString(" ", withString: "-")

关于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: "")

对于任何想要从字符串中删除前导空格的人(正如问题标题所明确要求的那样),这里有一个答案:

假设:

let string = "   Hello, World!   "

要删除所有前导空格,使用以下代码:

var filtered = ""
var isLeading = true
for character in string {
    if character.isWhitespace && isLeading {
        continue
    } else {
        isLeading = false
        filtered.append(character)
    }
}
print(filtered) // "Hello, World!   "

我相信有比这更好的代码,但它已经完成了我的工作。

当你想要删除所有类型的空白时(基于这个SO答案)的正确方法是:

extension String {
    var stringByRemovingWhitespaces: String {
        let components = componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
        return components.joinWithSeparator("")
    }
}

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

extension String {
    func removingWhitespaces() -> String {
        return components(separatedBy: .whitespaces).joined()
    }
}

EDIT

这个答案是在问题是关于删除所有空白时发布的,问题被编辑为只提到前导空白。如果你只想删除前导空白,请使用以下方法:

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

这个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: "")
    }
  }

例子:

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