Swift中的String类是否有trim方法?

428

Swift中的String类型是否有trim方法?例如:

let result = " abc ".trim()
// result == "abc"

5
@mattdipasquale 中的 "trim" 是指这个操作的常见名称。 - Austin
16个回答

867

以下是如何从 String 的开头和结尾删除所有空格的方法。

(示例已在Swift 2.0中测试。)

let myString = "  \t\t  Let's trim all the whitespace  \n \t  \n  "
let trimmedString = myString.stringByTrimmingCharactersInSet(
    NSCharacterSet.whitespaceAndNewlineCharacterSet()
)
// Returns "Let's trim all the whitespace"

(例子已经测试通过,适用于Swift 3+。)

let myString = "  \t\t  Let's trim all the whitespace  \n \t  \n  "
let trimmedString = myString.trimmingCharacters(in: .whitespacesAndNewlines)
// Returns "Let's trim all the whitespace"

无法在Swift 1.2上工作,因为没有从String自动转换为NSString的约定。 - elcuco
5
在Swift 1.2中,它可以正常工作 - String对象具有stringByTrimmingCharactersInSet方法(它不限于NSString)。 - Ben Dodson
9
在Swift 3.0中,代码为:let trimmedString = myString.trimmingCharacters(in: .whitespaces) - kikettas
6
这并不意味着它已经过时。并非所有人都在使用Swift 3.0。 - c.dunlap
2
在Swift 3.0中,这将不会删除字符串之间的空格。它只会删除前导和尾随空格。有关详细信息,请参阅此答案:https://dev59.com/oV4b5IYBdhLWcg3w5VI9#39067610 - user4886069
显示剩余2条评论

144

将此代码放入项目中的一个文件中,例如 Utils.swift:

extension String {   
    func trim() -> String {
        return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
    }
}

那么你将能够做到这一点:

let result = " abc ".trim()
// result == "abc"

Swift 3.0 解决方案

extension String {   
    func trim() -> String {
    return self.trimmingCharacters(in: NSCharacterSet.whitespaces)
   }
}

那么您将能够做到这一点:

let result = " Hello World ".trim()
// result = "HelloWorld"

2
这安全吗?如果苹果或某个第三方库向“String”添加相同的方法,我该如何防止方法名称冲突? - ma11hew28
12
扩展是安全的 - 实际上,苹果公司在其内部API中广泛使用它们。您无法防止任何名称冲突,这实际上是一件好事。当苹果公司最终添加trim()方法时,您会收到编译错误,并且您将知道您的扩展不再需要了。扩展非常优雅,可以将方法放在您需要它们的地方,而不是像StringUtils这样的某些模糊的实用类中。我所遇到的问题是,当某个类没有我需要的方法时,可能是因为未导入其他框架添加了扩展。 - absmiths
3
嘿,在Swift 3中应该返回 return self.trimmingCharacters(in: .whitespacesAndNewlines)。 (说明:这是一行代码,用于在Swift 3编程语言中去除字符串开头和结尾的空格和换行符) - user5273262
7
let result = " Hello World ".trim() // result = "HelloWorld"这不会移除字符串中包含的空格,只会移除开头和结尾的空格。 - Sahil
3
这不会删除字符串之间的空格。它只会删除前导和尾随空格。因此,更好的方法是使用yourtext?.replacingOccurrences(of: " ", with: "") 来删除字符串中间的空格,而不是使用trimmingCharacters。 - Umesh Sawant
2
“Hello World” -> “HelloWorld” 这样的翻译非常误导人,因为 trimmingCharacters 方法并不会删除“Hello”和“World”之间的空格。 - markckim

62

在Swift 3.0中

extension String
{   
    func trim() -> String
   {
    return self.trimmingCharacters(in: CharacterSet.whitespaces)
   }
}

而且你可以打电话

let result = " Hello World ".trim()  /* result = "Hello World" */

4
如果我只想去掉开头和结尾的空格,该怎么办? - Suragch
1
我对Swift 3扩展还不熟悉。如果一个库修改了String,而我也修改了String,是否可能会发生冲突?如果未来的Swift版本添加了trim()方法怎么办?所以...基本上...这样使用扩展是安全的吗? - Gattster
1
可能会出现碰撞。 - Alex Brown
1
让结果 = " Hello World ".trim() // 结果 = "HelloWorld" 这不会删除字符串中包含的空格。只会删除前导和尾随空格。 - Sahil

55

Swift 5 & 4.2

let trimmedString = " abc ".trimmingCharacters(in: .whitespaces)
 //trimmedString == "abc"

21

Swift 3

let result = " abc ".trimmingCharacters(in: .whitespacesAndNewlines)

@LucasFarah 请查看swift-evolution - Warif Akhand Rishi
预计发布日期:2016年底 - Warif Akhand Rishi
1
实际上是“whitespacesAndNewlines”,哈哈,少打了一个“s”。 - RainCast

12

是的,可以这样做:

var str = "  this is the answer   "
str = str.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
print(srt) // "this is the answer"

CharacterSet实际上是一个非常强大的工具,用它可以创建比像.whitespacesAndNewlines这样的预定义集合更加灵活的修剪规则。

例如:

var str = " Hello World !"
let cs = CharacterSet.init(charactersIn: " !")
str = str.trimmingCharacters(in: cs)
print(str) // "Hello World"

4
在Swift3 XCode 8 Final中,需要注意的是CharacterSet.whitespaces不再是一个函数!(同样的,NSCharacterSet.whitespaces也不是)
extension String {
    func trim() -> String {
        return self.trimmingCharacters(in: CharacterSet.whitespaces)
    }
}

4

我喜欢Swift中符合非变异动词-ing的写法。 - Alex Brown

4

将字符串截断到特定长度

如果你输入了一段句子/文字并且只想保存其中指定长度的文本。可以添加以下扩展到类中:

extension String {

   func trunc(_ length: Int) -> String {
    if self.characters.count > length {
        return self.substring(to: self.characters.index(self.startIndex, offsetBy: length))
    } else {
        return self
    }
  }

  func trim() -> String{
     return self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
   }

}

使用

var str = "Lorem Ipsum is simply dummy text of the printing and typesetting industry."
//str is length 74
print(str)
//O/P:  Lorem Ipsum is simply dummy text of the printing and typesetting industry.

str = str.trunc(40)
print(str)
//O/P: Lorem Ipsum is simply dummy text of the 

1
不回答问题。 - Willeke

4

//移除 Swift 4.0 中的空格和换行符

extension String {
    func trim() -> String {
        return self.trimmingCharacters(in: .whitespacesAndNewlines)         
    }
}

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