2015-02-17 14 views
97

Мне нужен способ удалить первый символ из строки, которая является пространством. Я ищу метод или даже расширение для типа String, которое я могу использовать для вырезания символа строки.Как удалить все пробелы из строки? - swift

+8

Вы хотите удалить первый пробел или символы пробела в строке? – Alex

+1

Возможный дубликат: [Удалить символ пробела из строки, исключая пробел] (http://stackoverflow.com/q/26963379/1966109). –

ответ

231

Чтобы удалить начальные и конечные пробельные:

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

Swift 3/Swift 4:

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

это будет работать только для ведущих и конечных пробелов. это не приведет к удалению пробелов, содержащихся в строке. – sun

+54

Если вы хотите удалить все пробелы, вы можете попробовать myString.stringByReplacingOccurrencesOfString ("", withString: "") – Lucas

+5

Вы также можете использовать 'NSCharacterSet.whitespaceAndNewlineCharacterSet()', если хотите обрезать символы новой строки. – Blip

5

Я хотел бы использовать это расширение, чтобы быть гибким и имитируют, как другие коллекции это сделать:

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" 
+0

Работает только для "" (не учитывает другие виды whitesapce) – fpg1503

4

Если вы хотите удалить пробелы спереди (и сзади), но не посередине, вы должны использовать stringByTrimmingCharactersInSet

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

Если вы хотите удалить пробелы из любой точки в строке, то вы можете захотеть взглянуть на stringByReplacing ...

+0

Как удалить среднее пространство? –

+0

@NikhilGupta нет, только ведущий и конечный (пример «Первое слово» выводит «Первое слово»). – fpg1503

+0

Это дубликат принятого ответа – fpg1503

65

Это расширение строки удаляет все пробелы из строки, а не только конечные пробелы. ..

extension String { 
    func replace(string:String, replacement:String) -> String { 
     return self.stringByReplacingOccurrencesOfString(string, withString: replacement, options: NSStringCompareOptions.LiteralSearch, range: nil) 
    } 

    func removeWhitespace() -> String { 
     return self.replace(" ", replacement: "") 
    } 
} 

Пример:

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

Работает только для "" (не учитывает другие виды whitesapce) – fpg1503

+0

@ fpg1503 какие еще виды пробелов? – Ricardo

+0

Те, которые определены в категории Zs: fileformat.info/info/unicode/category/Zs/list.htm – fpg1503

14

Для Swift 3.0+ см. Другие ответы. Теперь это наследие ответ для Swift 2.x

Как ответил выше, так как вы заинтересованы в удалении первого символа в .stringByTrimmingCharactersInSet() метод экземпляра будет работать красиво:

myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) 

Вы может также сделать свой собственный характер, устанавливает обрезать границы ваших строк на, например:

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

Существует также встроенный метод экземпляра, чтобы иметь дело с удалением или заменой подстроки s stringByReplacingOccurrencesOfString (target: String, replacement: String). Он может удалять пробелы или любые другие модели, которые происходят в любом месте строки

Вы можете задать параметры и диапазоны, но не нужно:

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

Это простой способ, чтобы удалить или заменить любое повторение шаблон символов в вашей строке и может быть прикован цепью, хотя каждый раз через него приходится проходить еще один проход через всю вашу строку, снижая эффективность. Таким образом, вы можете сделать это:

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

... но это займет в два раза больше.

.stringByReplacingOccurrencesOfString() documentation from Apple site

Цепной эти методы экземпляр строки иногда может быть очень удобно для преобразования один выходных, например, если вы хотите, чтобы преобразовать короткое NSData блоба в шестнадцатеричной строку без пробелов в одной строке, вы можете сделать это с Swift встроенный в Струнный интерполяции и некоторые подрезки и замены:

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

Работает только для "" (не учитывает другие виды whitesapce) – fpg1503

+0

@ fpg1503 читает сверху. –

+0

Он по-прежнему не рассматривает другие виды пробелов в середине строки – fpg1503

17

Вы также можете использовать регулярное выражение.

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

Вы можете попробовать это, а

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

Работает только для "" (не учитывает другие типы whitesapce) – fpg1503

-1

Swift 3 вариант ответа BadmintonCat в

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

Работает только для "" (не учитывает другие виды whitesapce) – fpg1503

+0

Потому что ваш ответ неправильный. Ответ, который вы предоставили, также неверен. Существует несколько видов пробелов, поэтому использование 'whitespaceCharacterSet' - лучшая практика. – fpg1503

98

правильный путь, если вы хотите, чтобы удалить все виды непечатаемых (основанный на this SO answer) является:

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

это работало нормально. Я буду использовать его здесь. Спасибо – Greg

+4

также .components (отделенныеBy: .whitespacesAndNewlines) для новых строк тоже – Derek

+0

Это должно быть func не var –

4

Для быстры 3.0

import Foundation 

var str = " Hear me calling" 

extension String { 

    var stringByRemovingWhitespaces: String { 

     let components = self.components(separatedBy: .whitespaces) 
     return components.joined(separator: "") 
    } 
} 

str.stringByRemovingWhitespaces //Hearmecalling 
22

Свифта 3

Вы можете просто использовать этот метод удалить все нормальные пробелы в строке (не co nsider все виды пробелов):

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

Результат будет:

HelloWorld! 
+1

Работает только для "" (не учитывает другие типы whitesapce) – fpg1503

+0

@ fpg1503, но это сработало для меня с помощью вкладки и "" – Greg

+0

@Greg у вас все еще отсутствует 16 других символов: http: //www.fileformat. info/info/unicode/category/Zs/list.htm – fpg1503

1

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

Чтобы удалить все пробелы из строки:

let space_removed_string = (yourstring?.components(separatedBy: " ").joined(separator: ""))! 
0

Попробуйте выполнить функциональное программирование, чтобы удалить пробелы:

extension String { 
    func whiteSpacesRemoved() -> String { 
    return self.filter { $0 != Character(" ") } 
    } 
} 
Смежные вопросы