Мне нужен способ удалить первый символ из строки, которая является пробелом. Я ищу метод или даже расширение для типа String, которое я могу использовать, чтобы вырезать символ строки.
Мне нужен способ удалить первый символ из строки, которая является пробелом. Я ищу метод или даже расширение для типа String, которое я могу использовать, чтобы вырезать символ строки.
Ответы:
Чтобы удалить начальные и конечные пробелы:
let trimmedString = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
Свифт 3 / Свифт 4:
let trimmedString = string.trimmingCharacters(in: .whitespaces)
NSCharacterSet.whitespaceAndNewlineCharacterSet()
если вы хотите обрезать символы новой строки.
Правильный способ удаления всевозможных пробелов (на основе этого ответа SO ):
extension String {
var stringByRemovingWhitespaces: String {
let components = componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
return components.joinWithSeparator("")
}
}
extension String {
func removingWhitespaces() -> String {
return components(separatedBy: .whitespaces).joined()
}
}
Этот ответ был опубликован, когда вопрос касался удаления всех пробелов, вопрос был отредактирован так, чтобы упоминать только ведущие пробелы. Если вы хотите удалить только первые пробелы, используйте следующее:
extension String {
func removingLeadingSpaces() -> String {
guard let index = firstIndex(where: { !CharacterSet(charactersIn: String($0)).isSubset(of: .whitespaces) }) else {
return self
}
return String(self[index...])
}
}
Это расширение String удаляет все пробелы из строки, а не только конечные пробелы ...
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: "")
}
}
Пример:
let string = "The quick brown dog jumps over the foxy lady."
let result = string.removeWhitespace() // Thequickbrowndogjumpsoverthefoxylady.
Swift 3
Вы можете просто использовать этот метод для удаления всех обычных пробелов в строке (не учитывает все типы пробелов):
let myString = " Hello World ! "
let formattedString = myString.replacingOccurrences(of: " ", with: "")
Результат будет:
HelloWorld!
Вы также можете использовать регулярные выражения.
let trimmedString = myString.stringByReplacingOccurrencesOfString("\\s", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: nil)
Для Swift 3.0+ смотрите другие ответы. Теперь это унаследованный ответ для Swift 2.x
Как уже было сказано выше, поскольку вы заинтересованы в удалении первого символа, метод экземпляра .stringByTrimmingCharactersInSet () будет работать хорошо:
myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
Вы также можете создавать свои собственные наборы символов, чтобы обрезать границы ваших строк, например:
myString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>"))
Существует также встроенный метод экземпляра для удаления или замены подстрок, называемый stringByReplacingOccurferencesOfString (target: String, replace: String) . Он может удалить пробелы или любые другие шаблоны, которые встречаются в любом месте вашей строки
Вы можете указать параметры и диапазоны, но не нужно:
myString.stringByReplacingOccurrencesOfString(" ", withString: "")
Это простой способ удалить или заменить любой повторяющийся набор символов в вашей строке, и его можно объединить в цепочку, хотя каждый раз, когда он проходит через него, приходится проходить еще раз через всю строку, что снижает эффективность. Так что вы можете сделать это:
myString.stringByReplacingOccurrencesOfString(" ", withString: "").stringByReplacingOccurrencesOfString(",", withString: "")
... но это займет вдвое больше времени.
Документация .stringByReplacingOccursionsOfString () с сайта Apple
Цепочка этих методов экземпляра String иногда может быть очень удобной для однократных преобразований, например, если вы хотите преобразовать короткий BLOB-объект NSData в шестнадцатеричную строку без пробелов в одной строке, вы можете сделать это с помощью встроенной в Swift интерполяции String и некоторой обрезки и замена:
("\(myNSDataBlob)").stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>")).stringByReplacingOccurrencesOfString(" ", withString: "")
Для Swift 3.0
import Foundation
var str = " Hear me calling"
extension String {
var stringByRemovingWhitespaces: String {
return components(separatedBy: .whitespaces).joined()
}
}
str.stringByRemovingWhitespaces // Hearmecalling
Я бы использовал это расширение, чтобы быть гибким и подражать тому, как это делают другие коллекции:
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"
Если вы хотите удалить пробелы спереди (и сзади), но не посередине, вы должны использовать stringByTrimmingCharactersInSet
let dirtyString = " First Word "
let cleanString = dirtyString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
Если вы хотите удалить пробелы в любом месте строки, вы можете посмотреть на stringByReplacing ...
" First Word "
выходных данных "First Word"
).
Свифт 4, 4.2 и 5
Удалить пространство только спереди и сзади
let str = " Akbar Code "
let trimmedString = str.trimmingCharacters(in: .whitespacesAndNewlines)
Удалить пробелы из любого места в строке
let stringWithSpaces = " The Akbar khan code "
let stringWithoutSpaces = stringWithSpaces.replacingOccurrences(of: " ", with: "")
Вы также можете попробовать это
let updatedString = searchedText?.stringByReplacingOccurrencesOfString(" ", withString: "-")
extension String {
var removingWhitespaceAndNewLines: String {
return removing(.whitespacesAndNewlines)
}
func removing(_ forbiddenCharacters: CharacterSet) -> String {
return String(unicodeScalars.filter({ !forbiddenCharacters.contains($0) }))
}
}
Если кто-нибудь удаляет лишний пробел из строки, например, = "This is the demo text remove extra space between the words."
Вы можете использовать эту функцию в 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
}
и результат будет
"This is the demo text remove extra space between the words."
Привет, это может быть поздно, но стоит попробовать. Это из файла детской площадки. Вы можете сделать это расширением String.
Это написано в Swift 5.3
Способ 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 "
Способ 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 "
Версия 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)
}
let strFirstName = txtFirstName.text?.trimmingCharacters(in:
CharacterSet.whitespaces)
Еще один ответ, иногда входная строка может содержать более одного пробела между словами. Если вам нужно стандартизировать, чтобы между словами было только 1 пробел, попробуйте это (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 !"
string = string.filter ({!" ".contains($0) })
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: "")
}
}
whitespaceCharacterSet
- это лучшая практика.
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)
}
}
Чтобы удалить все пробелы из строки:
let space_removed_string = (yourstring?.components(separatedBy: " ").joined(separator: ""))!