2016-02-18 4 views
3

я пытаюсь удалить пробелы и некоторые символы из строки, пожалуйста, проверьте мой код нижеSwift - Удалить пробелы из строки не работает

// giving phoneString = +39 333 3333333 
var phoneString = ABMultiValueCopyValueAtIndex(phone, indexPhone).takeRetainedValue() as! String 

// Remove spaces from string 
phoneString = phoneString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) 

// Remove +39 if exist 
if phoneString.rangeOfString("+39") != nil{ 
    phoneString = phoneString.stringByReplacingOccurrencesOfString("\0", withString: "+39", options: NSStringCompareOptions.LiteralSearch, range: nil) 
} 

print(phoneString) // output +39 333 3333333 

кажется, что все изменения не имеет никакого эффекта по моей строке, почему это происходит?

EDIT @VS

screen

EDIT 2:

Я попытался преобразовать свою строку в UTF-8, проверить результат:

43 51 57 194 160 51 51 51 194 160 51 51 51 51 51 51 51 

где:

43 = + 
51 = 3 
57 = 9 
160 = space 
194 = wtf?!? is this? 

ответ

2

, что вы пытаетесь сделать, это

// your input string 
let str = "+39 333 3333333" 

let arr = str.characters.split(" ").map(String.init) // ["+39", "333", "3333333"] 
// remove country code and reconstruct the rest as one string without whitespaces 
let str2 = arr.dropFirst().joinWithSeparator("") // "3333333333" 

отфильтровывать код страны, только если существует (как спрашивает Eendje)

let str = "+39 123 456789" 
let arr = str.characters.split(" ").map(String.init) 
let str3 = arr.filter { !$0.hasPrefix("+") }.joinWithSeparator("") // "123456789" 

UPDATE, на основе вашего обновления. 160 представляет собой свободное пространство. просто изменить следующую строку в своем коде

let arr = str.characters.split{" \u{00A0}".characters.contains($0)}.map(String.init) 

есть " \u{00A0}".characters.contains($0) выражение, где вы можете продлить строку столько пробельных символов, как вам нужно. 160 is \ u {00A0} см. details here

+0

Что делать, если строка не содержит «+39»? :) – Eendje

+0

@Eendje просмотреть мое обновление – user3441734

+0

@ Mono.WTF это, что вы ищете? – user3441734

0
let trimmedPhoneString = String(phoneString).stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) 

удалить +39, если существует, вы можете использовать вместо stringByReplacingOccurrencesOfString

+0

же результат, ничего не меняет –

+0

Чувак, stringByTrimmingCharactersInSet может t обойдите задние или ведущие белые пробелы, если таковые имеются. проверьте документы Apple. Как я уже сказал, вы можете использовать stringByReplacingOccurrencesOfString –

+0

, пожалуйста, отредактируйте править 2 –

2

Во-первых, stringByTrimmingCharactersInSet только стима строку - т.е. удаляет ведущие & завершающие пробелы - вам нужно использовать stringByReplacingOccurrencesOfString заменяющий «» с "".

Во-вторых, ваши параметры на stringByReplacingOccurrencesOfString для кода страны - неправильный путь.

В-третьих, «\ 0» - это не то, что вы хотите - это ASCII null, а не ноль.

1
phoneString = phoneString.stringByReplacingOccurrencesOfString("+39", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil) 


phoneString = phoneString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) 
+0

@ Mono.WTF, проверьте его. –

+0

такой же выход, ничего не меняется –

+0

Могу ли я увидеть журнал, напечатать phoneString, перед первой строкой, после первой строки и последней. и добавьте скриншот, –

1

Попробуйте это.Это работает для меня:

if phoneString.rangeOfString("+39") != nil{ 
      freshString = phoneString.stringByReplacingOccurrencesOfString("\0", withString: "+39", options: NSStringCompareOptions.LiteralSearch, range: nil) 
     } 

     var strings = freshString.componentsSeparatedByString(" ") as NSArray 
     var finalString = strings.componentsJoinedByString("") 
     //outputs +393333333333 
0
var phoneString = "+39 333 3333333" 
phoneString = phoneString.stringByReplacingOccurrencesOfString(" ", withString:"") 
if phoneString.rangeOfString("+39") != nil 
{ 
    phoneString = phoneString.stringByReplacingOccurrencesOfString("+39", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil) 
} 
print(phoneString) // output 3333333333 
+0

мой вывод: «333 3333333» –

1

Вы можете использовать это заменить пробельные

phoneNumber.replacingOccurrences(of: "\u{00A0}", with: "")

0

Swift 3/Swift 4

let withoutSpaces = phoneNumber.replacingOccurrences(of: "\\s", with: "", options: .regularExpression) 
Смежные вопросы