-5

Please help me, I use Xcode 8.3(swift 3.1), the function trimmingCharacters not work. My code as below:

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if var searchStr = textField.text{
       let _searchStr = searchStr.trimmingCharacters(in: .whitespaces)
       print("After trimming:\(_searchStr)")
   }
}

The input in textfield is 409 huỳnh and the print result is 409 huỳnh not as expected: 409huỳnh .

lee
  • 7,955
  • 8
  • 44
  • 60

6 Answers6

12

From the documentation:

A new string made by removing from both ends of the receiver characters contained in set.

It does not remove characters within the string.

You can replace whitespaces – corresponding to the .whitespaces character set – in the string with regular expression:

let _searchStr = searchStr.replacingOccurrences(of: "\\s", with: "", options: .regularExpression)
vadian
  • 274,689
  • 30
  • 353
  • 361
5

You can use Swift 5 Character property isWhitespace and filter all non whitespaces from your string:

let string = "409 huỳnh"
let result = string.filter { !$0.isWhitespace }
print(result)  // "409huỳnh"
Leo Dabus
  • 229,809
  • 59
  • 489
  • 571
2

trimmingCharacters removes only leading and trailing white spaces.

try this

let _searchStr = searchStr.replacingOccurrences(" ", withString: "", options:.literal, range: nil)
Sree
  • 530
  • 1
  • 8
  • 20
0

You can use

let trimmedString = searchStr.stringByReplacingOccurrencesOfString(" ", withString: "")

Hope this helps you !

MBN
  • 304
  • 1
  • 12
0

In Swift 3 you can use below code to solve the problem

let _searchStr = searchStr.replacingOccurrences(of: " ", with: "")
arunjos007
  • 4,105
  • 1
  • 28
  • 43
0

Swift 4 alternative

Since Swift 4 Strings are Sequences again. You can use a filter to do that.

let _searchStr = searchStr.filter({ " ".contains($0) == false })