我需要一种方法来从字符串中删除第一个字符,这是一个空格.我正在寻找一种方法,甚至是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)
fpg*_*503 139
想要删除所有类型的空格(基于此SO答案)的正确方法是:
extension String {
var stringByRemovingWhitespaces: String {
let components = componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
return components.joinWithSeparator("")
}
}
Run Code Online (Sandbox Code Playgroud)
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)
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)
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)
斯威夫特 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)
使用正则表达式的优秀案例:
" this is wrong contained teee xt "
.replacingOccurrences(of: "^\\s+|\\s+|\\s+$",
with: "",
options: .regularExpression)
// thisiswrongcontainedteeext
Run Code Online (Sandbox Code Playgroud)
我会使用这个扩展,灵活地模仿其他集合如何做到这一点:
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)
如果您想要从前面(和后面)而不是中间删除空格,您应该使用 stringByTrimmingCharactersInSet
let dirtyString = " First Word "
let cleanString = dirtyString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
Run Code Online (Sandbox Code Playgroud)
如果要从字符串中的任何位置删除空格,那么您可能需要查看stringByReplacing ...
另一种答案是,有时输入字符串的单词之间可以包含多个空格。如果您需要标准化为单词之间只有 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)