Apakah swift memiliki metode trim pada String?


393

Apakah swift memiliki metode trim pada String? Sebagai contoh:

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

4
@mattdipasquale trim adalah nama yang sangat umum untuk operasi ini
Austin

Jawaban:


831

Inilah cara Anda menghapus semua spasi putih dari awal dan akhir a String.

(Contoh diuji dengan 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"

(Contoh diuji dengan 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"

Semoga ini membantu.


Tidak akan berfungsi pada swif 1.2, karena tidak ada konvensi otomatis dari String ke NSString.
elcuco

5
Ini berfungsi dengan baik di Swift 1.2 - objek String memiliki metode stringByTrimmingCharactersInSet (ini bukan eksklusif NSString)
Ben Dodson

8
Dalam Swift 3.0 adalah: let trimmedString = myString.trimmingCharacters (in: .whitespaces)
kikettas

6
Itu tidak berarti sudah usang. Belum semua orang menggunakan Swift 3.0.
c.dunlap

2
Di Swift 3.0 ini tidak akan menghapus spasi putih di antara string. Itu hanya akan menghapus spasi putih awal dan akhir. Untuk itu lihat jawaban ini: stackoverflow.com/a/39067610/4886069

130

Letakkan kode ini pada file di proyek Anda, sesuatu seperti Utils.swift:

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

Jadi Anda akan dapat melakukan ini:

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

Solusi Swift 3.0

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

Jadi Anda akan dapat melakukan ini:

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

2
Apakah itu aman? Bagaimana cara mencegah tabrakan nama metode jika Apple atau perpustakaan pihak ketiga menambahkan metode yang sama String?
ma11hew28

12
Ekstensi aman - dan sebenarnya Apple memanfaatkannya secara produktif di API internal mereka. Anda tidak dapat mencegah tabrakan nama, dan ini sebenarnya bagus. Anda akan mendapatkan kesalahan kompilasi ketika Apple akhirnya menambahkan metode trim () dan Anda akan tahu bahwa ekstensi Anda tidak lagi diperlukan. Ekstensi cukup elegan dan meletakkan metode di mana Anda membutuhkannya daripada beberapa kelas utilitas tidak jelas seperti StringUtils - masalah yang saya miliki adalah ketika kelas tidak memiliki metode yang saya butuhkan karena beberapa kerangka kerja lainnya tidak diimpor yang menambahkan ekstensi ke dalamnya.
absmiths

3
Hai, di Swift 3 harus kembalireturn self.trimmingCharacters(in: .whitespacesAndNewlines)

7
biarkan result = "Hello World" .trim () // result = "HelloWorld" ini tidak akan menghapus spasi putih yang terkandung dalam string. akan menghapus hanya ruang depan dan belakang.
Sahil

2
ini tidak akan menghapus spasi di antara string. Ini hanya menghilangkan ruang depan dan belakang. Jadi cara yang lebih baik untuk menghilangkan spasi di antara string adalah menggunakan teks Anda? .MenggantiOccurrences (dari: "", dengan: "") daripada menggunakan pemangkasanKarakter
Umesh Sawant

57

Di Swift 3.0

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

Dan Anda bisa menelepon

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

4
Bagaimana jika saya hanya ingin memotong trailing dan memimpin spasi putih?
Suragch

1
Saya baru mengenal 3 ekstensi cepat. Jika pustaka memodifikasi String, dan saya juga memodifikasi String, apakah mungkin untuk mendapatkan tabrakan? Bagaimana jika metode swift ad a trim () versi mendatang? Jadi .. pada dasarnya .. apakah ekstensi aman digunakan seperti ini?
Gattster

1
itu mungkin untuk mendapatkan tabrakan.
Alex Brown

biarkan result = "Hello World" .trim () // result = "HelloWorld" ini tidak akan menghapus spasi putih yang terkandung dalam string. hanya akan mengembalikan ruang yang mengarah dan tertinggal
Sahil

45

Swift 5 & 4.2

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


9

Ya sudah, Anda bisa melakukannya seperti ini:

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

CharacterSet sebenarnya adalah alat yang sangat kuat untuk membuat aturan trim dengan fleksibilitas yang jauh lebih banyak daripada yang ditetapkan sebelumnya seperti .whitespacesAndNewlines miliki.

Sebagai contoh:

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

6

Potong String ke Panjang Tertentu

Jika Anda telah memasukkan blok kalimat / teks dan Anda ingin menyimpan hanya panjang tertentu dari teks itu. Tambahkan ekstensi berikut ke Kelas

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)
   }

}

Menggunakan

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

Anda dapat menggunakan metode trim () dalam ekstensi Swift String yang saya tulis https://bit.ly/JString .

var string = "hello  "
var trimmed = string.trim()
println(trimmed)// "hello"

terlihat bagus. Saya akan menggunakannya.
philipp

5

Cara serupa lainnya:

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

Menggunakan:

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())
    }
}

Diambil dari repo saya ini: https://github.com/goktugyil/EZSwiftExtensions/commit/609fce34a41f98733f97dfd7b4c23b5d16416206


Saya suka swift compliant verb-ing untuk non mutating.
Alex Brown

4

Di Swift3 XCode 8 Final

Perhatikan bahwa CharacterSet.whitespacesini bukan fungsi lagi!

(Tidak ada NSCharacterSet.whitespaces)

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

3

// Swift 4.0 Hapus spasi dan baris baru

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

2

Anda juga dapat mengirim karakter yang ingin Anda potong

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

Saya membuat fungsi ini yang memungkinkan untuk memasukkan string dan mengembalikan daftar string yang dipangkas oleh karakter apa pun

 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

}

karena tidak menemukan cara untuk melakukan ini di swift (mengkompilasi dan bekerja dengan sempurna di swift 2.0)


2
dapatkah Anda mendefinisikan apa yang Anda maksud dengan 'trim', dengan sebuah contoh. Karena jenis pengembalian Anda adalah [String], Anda tidak dapat mengimplementasikan apa yang diminta OP. (yang mengembalikan sebuah String)
Alex Brown

0

Jangan lupa import Foundationatau UIKit.

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

Hasil:

"aaa"

Kalau tidak, Anda akan mendapatkan:

error: value of type 'String' has no member 'trimmingCharacters'
    return self.trimmingCharacters(in: .whitespaces)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.