Swift có phương thức trim trên String không?


393

Swift có phương thức trim trên String không? Ví dụ:

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

4
@mattdipasquale trim là một tên rất phổ biến cho hoạt động này
Austin

Câu trả lời:


831

Đây là cách bạn loại bỏ tất cả các khoảng trắng từ đầu và cuối của a String.

(Ví dụ được thử nghiệm với 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"

(Ví dụ được thử nghiệm với 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"

Hi vọng điêu nay co ich.


Sẽ không hoạt động trên swif 1.2, vì không có quy ước tự động từ String thành NSString.
elcuco

5
Nó hoạt động tốt trong Swift 1.2 - đối tượng String có phương thức stringByTrimmingChar characterInset (nó không phải là độc quyền NSString)
Ben Dodson

8
Trong Swift 3.0 là: let trimmedString = myString.trimmingChar character (in: .whitespaces)
kikettas

6
Điều đó không có nghĩa là nó đã lỗi thời. Không phải ai cũng đang sử dụng Swift 3.0.
c.dunlap

2
Trong Swift 3.0, điều này sẽ không loại bỏ khoảng trắng ở giữa chuỗi. Nó sẽ chỉ xóa các khoảng trắng hàng đầu và dấu. Đối với điều đó tham khảo câu trả lời này: stackoverflow.com/a/39067610/4886069

130

Đặt mã này vào một tệp trong dự án của bạn, một cái gì đó thích Utils.swift:

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

Vì vậy, bạn sẽ có thể làm điều này:

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

Giải pháp Swift 3.0

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

Vì vậy, bạn sẽ có thể làm điều này:

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

2
Có an toàn không? Làm cách nào để ngăn chặn xung đột tên phương thức nếu Apple hoặc thư viện bên thứ ba nào đó thêm phương thức tương tự vào String?
ma11hew28

12
Các tiện ích mở rộng đều an toàn - và trên thực tế, Apple sử dụng rất nhiều chúng trong các API nội bộ của chúng. Bạn không thể ngăn chặn bất kỳ va chạm tên, và điều này thực sự tốt. Bạn sẽ gặp lỗi biên dịch khi Apple cuối cùng đã thêm phương thức trim () và bạn sẽ biết rằng tiện ích mở rộng của mình không còn cần thiết nữa. Các tiện ích mở rộng khá thanh lịch và đặt các phương thức mà bạn cần chúng thay vì một số lớp tiện ích tối nghĩa như StringUtils - vấn đề tôi gặp phải là khi một lớp không có phương thức tôi cần vì một số khung công tác khác không được nhập mà đã thêm các tiện ích mở rộng vào nó.
thợ rèn

3
Xin chào, trong Swift 3 sẽ được trả lạireturn self.trimmingCharacters(in: .whitespacesAndNewlines)

7
let result = "Hello World" .trim () // result = "HelloWorld" điều này sẽ không xóa các khoảng trắng có trong chuỗi. sẽ chỉ lưu lại không gian hàng đầu và dấu.
Sahil

2
điều này sẽ không loại bỏ khoảng trắng ở giữa chuỗi. Nó chỉ loại bỏ không gian hàng đầu và dấu. Vì vậy, cách tốt hơn để loại bỏ khoảng trắng ở giữa chuỗi là sử dụng yourtext? .RerplacesOccurrences (của: "", với: "") thay vì sử dụng tr trimChar character
Umesh Sawant

57

Trong Swift 3.0

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

Và bạn có thể gọi

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

4
Điều gì sẽ xảy ra nếu tôi chỉ muốn cắt bớt dấu vết và khoảng trắng hàng đầu?
Suragch

1
Tôi mới sử dụng 3 tiện ích mở rộng. Nếu một thư viện sửa đổi Chuỗi và tôi cũng sửa đổi Chuỗi, liệu có thể bị va chạm không? Điều gì xảy ra nếu các phiên bản tương lai của quảng cáo swift một phương thức trim ()? Vì vậy, về cơ bản .. các phần mở rộng có an toàn để sử dụng như thế này không?
Gattster

1
nó có thể bị va chạm.
Alex Brown

let result = "Hello World" .trim () // result = "HelloWorld" điều này sẽ không xóa các khoảng trắng có trong chuỗi. sẽ chỉ còn lại các không gian hàng đầu và dấu vết
Sahil

45

Swift 5 & 4.2

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


9

Có nó, bạn có thể làm như thế này:

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

Character set thực sự là một công cụ thực sự mạnh mẽ để tạo ra một quy tắc cắt tỉa linh hoạt hơn nhiều so với một bộ được xác định trước như .whitespacesAndNewlines có.

Ví dụ:

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

6

Chuỗi cắt ngắn theo chiều dài cụ thể

Nếu bạn đã nhập khối câu / văn bản và bạn chỉ muốn lưu chiều dài được chỉ định ra khỏi văn bản. Thêm phần mở rộng sau vào 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)
   }

}

Sử dụng

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

Bạn có thể sử dụng phương thức trim () trong tiện ích mở rộng Chuỗi Swift tôi đã viết https://bit.ly/JString .

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

có vẻ tốt đẹp. Tôi sẽ sử dụng nó.
philipp

5

Một cách tương tự khác:

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

Sử dụng:

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

Lấy từ repo này của tôi: https://github.com/goktugyil/EZSwiftExtensions/commit/609fce34a41f98733f97dfd7b4c23b5d16416206


Tôi thích động từ tuân thủ nhanh chóng cho không đột biến.
Alex Brown

4

Trong Chung kết Swift3 XCode 8

Lưu ý rằng đó CharacterSet.whitespaceskhông phải là một chức năng nữa!

(Cũng không là NSCharacterSet.whitespaces )

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

3

// Swift 4.0 Xóa khoảng trắng và dòng mới

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

2

Bạn cũng có thể gửi các ký tự mà bạn muốn được truy tìm

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

Tôi đã tạo hàm này cho phép nhập một chuỗi và trả về một danh sách các chuỗi được cắt bởi bất kỳ ký tự nào

 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

}

như đã không tìm thấy một cách để làm điều này trong swift (biên dịch và hoạt động hoàn hảo trong swift 2.0)


2
bạn có thể định nghĩa những gì bạn có nghĩa là 'cắt', với một ví dụ. Vì loại trả về của bạn là [Chuỗi], bạn không thể thực hiện những gì OP yêu cầu. (trả về một chuỗi)
Alex Brown

0

Đừng quên import Foundationhoặc UIKit.

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

Kết quả:

"aaa"

Nếu không, bạn sẽ nhận được:

error: value of type 'String' has no member 'trimmingCharacters'
    return self.trimmingCharacters(in: .whitespaces)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.