swift在String上是否有trim方法?


392

swift在String上是否有trim方法?例如:

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

4
@mattdipasquale修剪是此操作的非常通用的名称
奥斯汀

Answers:


831

这是删除开头和结尾的所有空格的方法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"

希望这可以帮助。


在swif 1.2上将不起作用,因为从String到NSString没有自动约定。
elcuco

5
在Swift 1.2中可以正常工作-String对象具有stringByTrimmingCharactersInSet方法(它不是NSString专有的)
Ben Dodson

8
在Swift 3.0中是:let trimmedString = myString.trimmingCharacters(in.whitespaces)
kikettas

6
这并不意味着它已经过时。并不是每个人都在使用Swift 3.0。
c.dunlap '16

2
在Swift 3.0中,这不会删除字符串之间的空格。它只会删除开头和结尾的空格。为此,请参考以下答案: stackoverflow.com/a/39067610/4886069

130

将此代码放在项目的文件中,例如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
这样安全吗?如果Apple或某些第三方库向其中添加了相同的方法,如何防止方法名称冲突String
ma11hew28

12
扩展是安全的-实际上,Apple在其内部API中大量使用了扩展。您不能防止任何名称冲突,这实际上是很好的。当Apple确实添加了trim()方法时,您将得到一个编译错误,并且您将知道不再需要扩展名。扩展非常优雅,可以将方法放在需要的地方,而不是诸如StringUtils之类的晦涩实用类-我遇到的问题是,当一个类没有我需要的方法时,因为没有导入其他框架来添加扩展。
absmiths 2015年

3
嘿,应该在Swift 3中返回return self.trimmingCharacters(in: .whitespacesAndNewlines)

7
let result =“ Hello World” .trim()// result =“ HelloWorld”这不会删除字符串中包含的空格。将仅删除前导和尾随空格。
萨希尔

2
这不会删除字符串之间的空格。它仅删除前导和尾随空间。因此,删除字符串之间空格的更好方法是使用yourtext?.replacingOccurrences(of:“”,with:“”)而不是使用trimmingCharacters
Umesh Sawant

57

在Swift 3.0中

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

你可以打电话

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

4
如果我只想修剪尾随空格和前导空格怎么办?
Suragch '16

1
我是3扩展的新手。如果库修改了String,而我也修改了String,是否有可能发生冲突?如果以后的swift广告使用trim()方法怎么办?所以..基本上..扩展名可以安全使用吗?
加特斯特

1
可能会发生碰撞。
亚历克斯·布朗

let result =“ Hello World” .trim()// result =“ HelloWorld”这不会删除字符串中包含的空格。只会删除前导和尾随空格
Sahil

45

迅捷5和4.2

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


9

是的,您可以这样做:

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"

6

将字符串截断为特定长度

如果您输入了句子/文本块,并且您只想在文本中保存指定的长度。将以下扩展添加到Class

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 


5

另一种类似的方式:

extension String {
    var trimmed:String {
        return self.trimmingCharacters(in: CharacterSet.whitespaces)
    }
}

采用:

let trimmedString = "myString ".trimmed

4
extension String {
    /// EZSE: Trims white space and new line characters
    public mutating func trim() {
         self = self.trimmed()
    }

    /// EZSE: Trims white space and new line characters, returns a new string
    public func trimmed() -> String {
        return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
    }
}

摘自我的这个仓库:https : //github.com/goktugyil/EZSwiftExtensions/commit/609fce34a41f98733f97dfd7b4c23b5d16416206


我喜欢快速的非变异动词。
亚历克斯·布朗

4

在Swift3 XCode 8 Final中

注意,CharacterSet.whitespaces不再是一个函数!

(都不是NSCharacterSet.whitespaces

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

3

// Swift 4.0删除空格和换行

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

2

您还可以发送要修剪的字符

extension String {


    func trim() -> String {

        return self.trimmingCharacters(in: .whitespacesAndNewlines)

    }

    func trim(characterSet:CharacterSet) -> String {

        return self.trimmingCharacters(in: characterSet)

    }
}

validationMessage = validationMessage.trim(characterSet: CharacterSet(charactersIn: ","))

0

我创建了此函数,该函数允许输入字符串并返回由任何字符修饰的字符串列表

 func Trim(input:String, character:Character)-> [String]
{
    var collection:[String] = [String]()
    var index  = 0
    var copy = input
    let iterable = input
    var trim = input.startIndex.advancedBy(index)

    for i in iterable.characters

    {
        if (i == character)
        {

            trim = input.startIndex.advancedBy(index)
            // apennding to the list
            collection.append(copy.substringToIndex(trim))

            //cut the input
            index += 1
            trim = input.startIndex.advancedBy(index)
            copy = copy.substringFromIndex(trim)

            index = 0
        }
        else
        {
            index += 1
        }
    }
    collection.append(copy)
    return collection

}

因为没有找到在swift中做到这一点的方法(在swift 2.0中可以编译并完美地工作)


2
您可以通过示例定义“修饰”的意思吗?由于您的返回类型为[String],因此您无法实现OP要求的内容。(返回字符串)
Alex Brown

0

不要忘记import FoundationUIKit

import Foundation
let trimmedString = "   aaa  "".trimmingCharacters(in: .whitespaces)
print(trimmedString)

结果:

"aaa"

否则,您将获得:

error: value of type 'String' has no member 'trimmingCharacters'
    return self.trimmingCharacters(in: .whitespaces)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.