Làm thế nào tôi nên loại bỏ tất cả các không gian hàng đầu khỏi một chuỗi? - nhanh chóng


170

Tôi cần một cách để loại bỏ ký tự đầu tiên khỏi chuỗi là khoảng trắng. Tôi đang tìm kiếm một phương thức hoặc thậm chí là một phần mở rộng cho loại Chuỗi mà tôi có thể sử dụng để cắt ra một ký tự của chuỗi.


8
Bạn có muốn xóa ký tự khoảng trắng đầu tiên hoặc tất cả các ký tự khoảng trắng trong chuỗi không?
Alex

Câu trả lời:


380

Để loại bỏ khoảng trắng hàng đầu và dấu vết:

let trimmedString = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

Swift 3 / Swift 4:

let trimmedString = string.trimmingCharacters(in: .whitespaces)

180
điều này sẽ chỉ làm việc cho khoảng trắng hàng đầu và dấu. điều này sẽ không loại bỏ các khoảng trắng có trong chuỗi.
mặt trời

87
nếu bạn muốn xóa tất cả các khoảng trống, bạn có thể thử myString.opesByReplacesOccurrencesOfString ("", withString: "")
Lucas

6
Bạn cũng có thể sử dụng NSCharacterSet.whitespaceAndNewlineCharacterSet()nếu bạn muốn cắt bớt các ký tự dòng mới.
Blip

2
Để làm cho nó hoạt động với Swift 3.0 và cũng loại bỏ khoảng trắng ở giữa chuỗi, sử dụng câu trả lời: stackoverflow.com/a/39067610/4886069

2
Người dùng Swift 3+: yourString.replacesOccurrences (của: "", với: "")
Nadeesha Lakmal

144

Cách chính xác khi bạn muốn loại bỏ tất cả các loại khoảng trắng (dựa trên câu trả lời SO này ) là:

extension String {
    var stringByRemovingWhitespaces: String {
        let components = componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
        return components.joinWithSeparator("")
    }
}

Swift 3.0+ (3.0, 3.1, 3.2, 4.0)

extension String {
    func removingWhitespaces() -> String {
        return components(separatedBy: .whitespaces).joined()
    }
}

BIÊN TẬP

Câu trả lời này đã được đăng khi câu hỏi là về việc loại bỏ tất cả các khoảng trắng, câu hỏi đã được chỉnh sửa để chỉ đề cập đến các khoảng trắng hàng đầu. Nếu bạn chỉ muốn xóa các khoảng trắng hàng đầu, hãy sử dụng như sau:

extension String {
    func removingLeadingSpaces() -> String {
        guard let index = firstIndex(where: { !CharacterSet(charactersIn: String($0)).isSubset(of: .whitespaces) }) else {
            return self
        }
        return String(self[index...])
    }
}

5
cũng .components (táchBy: .whitespacesAndNewlines) cho các dòng mới nữa
Derek

Đây phải là một chức năng không phải là một var
Jakub Truhlář

1
Vì tính logic của tính năng . Bạn đang tạo một thuộc tính được tính khi bạn nên tạo một hàm . Nó đang làm smt chứ không phải giữ một giá trị hoặc tính toán nó từ một giá trị khác. Nhìn vào: stackoverflow.com/questions/24035276/
Ấn

4
@ JakubTruhlář - Đó là vấn đề quan điểm, không phải là tuyên bố thực tế. Xem phần
Ashley Mills

1
@ JakubTruhlář Bạn nói "Đây phải là một func không phải là var" - điều này nghe có vẻ giống như bạn đang nói một sự thật, không phải ý kiến ​​của bạn. Nếu bạn đọc câu trả lời cho câu hỏi được liên kết, bạn sẽ thấy điều đó trong khi nó "có ý nghĩa" với bạn, với những người khác thì không nhất thiết.
Ashley Mills

82

Phần mở rộng Chuỗi này sẽ xóa tất cả các khoảng trắng khỏi một chuỗi, không chỉ theo dõi khoảng trắng ...

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

Thí dụ:

let string = "The quick brown dog jumps over the foxy lady."
let result = string.removeWhitespace() // Thequickbrowndogjumpsoverthefoxylady.

4
Chỉ hoạt động cho "" (không xem xét các loại whitesapce khác)
fpg1503

@ fpg1503 những loại khoảng trắng khác?
Ricardo

Những cái được xác định trong danh mục Zs: fileformat.info/info/unicode/c
Ab / Zs / list.htmlm

45

Swift 3

Bạn chỉ có thể sử dụng phương pháp này để xóa tất cả các khoảng trắng thông thường trong một chuỗi (không xem xét tất cả các loại khoảng trắng):

let myString = " Hello World ! "
let formattedString = myString.replacingOccurrences(of: " ", with: "")

Kết quả sẽ là:

HelloWorld!

1
Chỉ hoạt động cho "" (không xem xét các loại whitesapce khác)
fpg1503

@Greg bạn vẫn còn thiếu 16 ký tự khác: fileformat.info/info/unicode/c
Ab / Zs / list.htmlm

18

Bạn cũng có thể sử dụng regex.

let trimmedString = myString.stringByReplacingOccurrencesOfString("\\s", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: nil)

Swift 4: myString.replacingOccurrences (của: "\\ s", với: "", lựa chọn: NSString.CompareOptions.regularExpression, khoảng: nil)
norbDEV

16

Đối với Swift 3.0+, xem các câu trả lời khác. Đây hiện là câu trả lời kế thừa cho Swift 2.x

Như đã trả lời ở trên, vì bạn quan tâm đến việc xóa ký tự đầu tiên, phương thức cá thể .opesByTrimmingChar characterInset () sẽ hoạt động tốt:

myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

Bạn cũng có thể tạo bộ ký tự của riêng mình để cắt ranh giới của chuỗi bằng cách, ví dụ:

myString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>"))

Ngoài ra còn có một phương thức được xây dựng để xử lý loại bỏ hoặc thay thế các chuỗi con được gọi là stringByReplinatingOccurrencesOfString (đích: Chuỗi, thay thế: Chuỗi) . Nó có thể xóa khoảng trắng hoặc bất kỳ mẫu nào khác xảy ra ở bất kỳ đâu trong chuỗi của bạn

Bạn có thể chỉ định các tùy chọn và phạm vi, nhưng không cần:

myString.stringByReplacingOccurrencesOfString(" ", withString: "")

Đây là một cách dễ dàng để loại bỏ hoặc thay thế bất kỳ mẫu ký tự lặp lại nào trong chuỗi của bạn và có thể bị xiềng xích, mặc dù mỗi lần nó phải vượt qua toàn bộ chuỗi của bạn, làm giảm hiệu quả. Vì vậy, bạn có thể làm điều này:

 myString.stringByReplacingOccurrencesOfString(" ", withString: "").stringByReplacingOccurrencesOfString(",", withString: "")

... nhưng nó sẽ mất gấp đôi thời gian.

Tài liệu .opesByReplateOccurrencesOfString () từ trang web của Apple

Việc xâu chuỗi các phương thức đối tượng Chuỗi này đôi khi có thể rất thuận tiện cho một lần chuyển đổi, ví dụ nếu bạn muốn chuyển đổi một NSData blob ngắn thành chuỗi hex không có khoảng trắng trong một dòng, bạn có thể thực hiện điều này với phép nội suy Chuỗi tích hợp của Swift và một số cắt xén và thay thế:

("\(myNSDataBlob)").stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>")).stringByReplacingOccurrencesOfString(" ", withString: "")

Chỉ hoạt động cho "" (không xem xét các loại whitesapce khác)
fpg1503

Nó vẫn không xem xét các loại khoảng trắng khác ở giữa Chuỗi
fpg1503

12

Đối với swift 3.0

import Foundation

var str = " Hear me calling"

extension String {
    var stringByRemovingWhitespaces: String {
        return components(separatedBy: .whitespaces).joined()
    }
}

str.stringByRemovingWhitespaces  // Hearmecalling

8

Swift 4

Trường hợp tuyệt vời để sử dụng regex:

" this is    wrong contained teee xt     "
    .replacingOccurrences(of: "^\\s+|\\s+|\\s+$", 
                          with: "", 
                          options: .regularExpression)

// thisiswrongcontainedteeext

7

Tôi sẽ sử dụng tiện ích mở rộng này, để linh hoạt và bắt chước cách các bộ sưu tập khác thực hiện:

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"

Chỉ hoạt động cho "" (không xem xét các loại whitesapce khác)
fpg1503

6

Nếu bạn muốn xóa khoảng trắng ở phía trước (và phía sau) nhưng không phải ở giữa, bạn nên sử dụng stringByTrimmingCharactersInSet

    let dirtyString   = " First Word "
    let cleanString = dirtyString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

Nếu bạn muốn xóa khoảng trắng khỏi bất kỳ vị trí nào trong chuỗi, thì bạn có thể muốn xem chuỗiByReplinating ...


Làm thế nào để loại bỏ không gian giữa là tốt?
Nikhil Gupta

@NikhilGupta không, chỉ dẫn và theo dõi (ví dụ " First Word "đầu ra "First Word").
fpg1503

6

Swift 4, 4.2 và 5

Chỉ xóa không gian từ trước và cuối

let str = "  Akbar Code  "
let trimmedString = str.trimmingCharacters(in: .whitespacesAndNewlines)

Xóa khoảng trắng khỏi mọi vị trí trong chuỗi

let stringWithSpaces = " The Akbar khan code "
let stringWithoutSpaces = stringWithSpaces.replacingOccurrences(of: " ", with: "")

3

Bạn cũng có thể thử cái này

   let updatedString = searchedText?.stringByReplacingOccurrencesOfString(" ", withString: "-")

Chỉ hoạt động cho "" (không xem xét các loại whitesapce khác)
fpg1503

3

Hãy thử lập trình chức năng để loại bỏ khoảng trắng:

extension String {
  func whiteSpacesRemoved() -> String {
    return self.filter { $0 != Character(" ") }
  }
}

3
extension String {

    var removingWhitespaceAndNewLines: String {
        return removing(.whitespacesAndNewlines)
    }

    func removing(_ forbiddenCharacters: CharacterSet) -> String {
        return String(unicodeScalars.filter({ !forbiddenCharacters.contains($0) }))
    }
}

3

Nếu bất cứ ai loại bỏ không gian thừa từ chuỗi eg = "This is the demo text remove extra space between the words."

Bạn có thể sử dụng Chức năng này trong Swift 4.

func removeSpace(_ string: String) -> String{
    var str: String = String(string[string.startIndex])
    for (index,value) in string.enumerated(){
        if index > 0{
            let indexBefore = string.index(before: String.Index.init(encodedOffset: index))
            if value == " " && string[indexBefore] == " "{
            }else{
                str.append(value)
            }
        }
    }
    return str
}

và kết quả sẽ là

"This is the demo text remove extra space between the words."

3

Hi điều này có thể là muộn nhưng đáng để thử. Đây là từ một tập tin sân chơi. Bạn có thể làm cho nó một phần mở rộng Chuỗi.

Điều này được viết trong Swift 5.3

Cách 1:

var str = "\n \tHello, playground       "
if let regexp = try? NSRegularExpression(pattern: "^\\s+", options: NSRegularExpression.Options.caseInsensitive) {
    let mstr = NSMutableString(string: str)
    regexp.replaceMatches(in: mstr, options: [], range: NSRange(location: 0, length: str.count), withTemplate: "")
    str = mstr as String
}

Result: "Hello, playground       "

Cách 2:

if let c = (str.first { !($0 == " " || $0 == "\t" || $0 == "\n") }) {
    if let nonWhiteSpaceIndex = str.firstIndex(of: c) {
        str.replaceSubrange(str.startIndex ..< nonWhiteSpaceIndex, with: "")
    }
}

Result: "Hello, playground       "

Đây là dành cho Swift 5.x
Kyle Emmanuel

Điều đó thật tuyệt! Cảm ơn
RJ Uy

2

Phiên bản Swift 3

  //This function trim only white space:
   func trim() -> String
        {
            return self.trimmingCharacters(in: CharacterSet.whitespaces)
        }
    //This function trim whitespeaces and new line that you enter:
     func trimWhiteSpaceAndNewLine() -> String
        {
            return self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
        }

2

Cắt tỉa khoảng trắng trong Swift 4

let strFirstName = txtFirstName.text?.trimmingCharacters(in: 
 CharacterSet.whitespaces)

2

Một câu trả lời khác, đôi khi chuỗi đầu vào có thể chứa nhiều khoảng trắng giữa các từ. Nếu bạn cần chuẩn hóa để chỉ có 1 khoảng trắng giữa các từ, hãy thử điều này (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 !"

1

Đối với tôi, dòng sau đây được sử dụng để loại bỏ khoảng trắng.

let result = String(yourString.filter {![" ", "\t", "\n"].contains($0)})


-1

Swift 3 phiên bản câu trả lời của BadbridgeCat

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(" ", replacement: "")
    }
}

Chỉ hoạt động cho "" (không xem xét các loại whitesapce khác)
fpg1503

Bởi vì câu trả lời của bạn là sai. Câu trả lời bạn đã cung cấp một bản cập nhật cũng sai. Có một số loại khoảng trắng và đó là lý do tại sao sử dụng whitespaceCharacterSetlà cách tốt nhất.
fpg1503

-1
class SpaceRemover
{
    func SpaceRemover(str :String)->String
    {
        var array = Array(str)
        var i = array.count
        while(array.last == " ")
        {
            var array1 = [Character]()
            for item in  0...i - 1
            {
                array1.append(array[item])
            }
            i = i - 1
            array = array1
            print(array1)
            print(array)

        }

        var arraySecond = array
        var j = arraySecond.count

        while(arraySecond.first == " ")
        {
            var array2 = [Character]()
            if j > 1
            {
                for item in 1..<j
                {
                    array2.append(arraySecond[item])
                }
            }
            j = j - 1
            arraySecond = array2
            print(array2)
            print(arraySecond)

        }
        print(arraySecond)
        return String(arraySecond)
    }
}

-2

Để xóa tất cả khoảng trắng khỏi chuỗi:

let space_removed_string = (yourstring?.components(separatedBy: " ").joined(separator: ""))!
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.