Swift - Вилучити символ "з рядка


84

У мене є рядок "Необов'язково (" 5 ")". Мені потрібно видалити "" навколо 5. "Я видалив" Необов'язково ", виконавши:

text2 = text2.stringByReplacingOccurrencesOfString("Optional(", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)

У мене виникають труднощі з видаленням символів ", оскільки вони позначають кінець рядка в коді.


22
Якщо рядок насправді складається з символів, Optional("5")то, можливо, щось пішло не так раніше, оскільки це опис необов’язкового рядка. Було б більш розумно розгортати необов’язкове перед присвоєнням text2, замість того, щоб видаляти "Необов’язково (..)" текстуально.
Martin R

Відповіді:


170

Swift використовує зворотну скісну риску, щоб уникнути подвійних лапок. Ось список спецсимволів, що втекли в Swift:

  • \0 (нульовий символ)
  • \\ (коса коса риса)
  • \t (горизонтальна вкладка)
  • \n (рядок подачі)
  • \r (повернення каретки)
  • \" (подвійна лапка)
  • \' (одинарна цитата)

Це має спрацювати:

text2 = text2.replacingOccurrences(of: "\\", with: "", options: NSString.CompareOptions.literal, range: nil)

1
На жаль, у Swift 1.2 це, здається, не працює на 32-бітних пристроях.
PassKit

1
@GerardGrundy Щиро дякую за коментар! Я оновив відповідь, щоб зробити її сумісною з сучасною версією Swift.
Сергій Калініченко

@ Сергій Калініченко Привіт, як я можу видалити кілька наборів символів для одного рядка? Наприклад, я хочу видалити ".mp3" або ".m4a" залежно від того, що містить рядок. Як я можу це зробити?
Вячеслав

59

Свіфт 3 і Свіфт 4:

text2 = text2.textureName.replacingOccurrences(of: "\"", with: "", options: NSString.CompareOptions.literal, range:nil)

Останні документи, оновлені до Swift 3.0.1, мають:

  • Нульовий символ ( \0)
  • Коса коса риса (\\ )
  • Горизонтальна вкладка (\t )
  • Подача рядка (\n )
  • Повернення каретки (\r )
  • Подвійна цитата ( \")
  • Одинарна пропозиція ( \')
  • Скаляр Unicode ( \u{n}), де n - від однієї до восьми шістнадцяткових цифр

Якщо вам потрібна додаткова інформація, ви можете заглянути в офіційні документи тут


28

Ось швидка 3 оновлена ​​відповідь

var editedText = myLabel.text?.replacingOccurrences(of: "\"", with: "")
Null Character (\0)
Backslash (\\)
Horizontal Tab (\t)
Line Feed (\n)
Carriage Return (\r)
Double Quote (\")
Single Quote (\')
Unicode scalar (\u{n})

Це набагато чистіший спосіб зробити це.
Super_Simon

9

Щоб видалити необов’язкове, вам слід лише зробити це

println("\(text2!)")

причина, якщо ви не використовуєте "!" він приймає необов’язкове значення text2

А щоб видалити "" з 5, вам потрібно перетворити його на NSInteger або NSNumber легко. Це "" викликає його рядок.


1
слід спочатку перевірити, що це не нуль, інакше це спричинить виняток.
CW0007007

6

Врешті-решт я отримав це для роботи на дитячому майданчику, маючи кілька символів, які я намагаюся видалити з рядка:

var otherstring = "lat\" : 40.7127837,\n"
var new = otherstring.stringByTrimmingCharactersInSet(NSCharacterSet.init(charactersInString: "la t, \n \" ':"))
count(new) //result = 10
println(new) 
//yielding what I'm after just the numeric portion 40.7127837

1
Не могли б ви пояснити: яке питання тут задається?
milez

5

Якщо ви хочете видалити із рядка більше символів, наприклад "a", "A", "b", "B", "c", "C", це можна зробити таким чином:

someString = someString.replacingOccurrences(of: "[abc]", with: "", options: [.regularExpression, .caseInsensitive])

4

Як каже Мартін Р, ваш рядок "Необов’язково (" 5 ")" схожий на те, що ви зробили щось не так.

dasblinkenlight відповідає вам, і це нормально, але для майбутніх читачів я спробую додати альтернативний код як:

if let realString = yourOriginalString {
    text2 = realString
} else {
    text2 = ""
}

text2 у вашому прикладі виглядає як String, і, можливо, йому вже встановлено значення "", але схоже, у вас десь є вашOriginalString типу Необов'язковий (String), який не був переданий або використаний правильно.

Сподіваюся, це може допомогти якомусь читачеві.


1
Це можна було б дещо спростити за допомогою оператора нульового злиття, наприклад let resultingString = optionalString ?? "".
Кіліан

4

Заміна для видалення не зовсім логічна. String.filter дозволяє повторювати рядок char символом char і зберігати лише справжнє твердження.

Свіфт 4 і 5

var aString = "Optional(\"5\")"

aString = aString.filter { $0 != "\"" }

> Optional(5)

Або продовжити

var aString = "Optional(\"5\")"

let filteredChars = "\"\n\t"

aString = aString.filter { filteredChars.range(of: String($0)) == nil }

> Optional(5)

Вибач, Люк, твій другий приклад дає повідомлення про помилку. Аргумент типу "String.Element" (він же "Character") не відповідає очікуваному типу "StringProtocol" .. Я думаю, ви щось пропустили?
user3069232

2

Скажімо, у вас є рядок:

var string = "potatoes + carrots"

І ви хочете замінити слово "картопля" у цьому рядку на "помідори"

string = string.replacingOccurrences(of: "potatoes", with: "tomatoes", options: NSString.CompareOptions.literal, range: nil)

Якщо ви надрукуєте рядок, він буде таким: "tomatoes + carrots"

Якщо ви хочете взагалі видалити слово "картопля" з жала, ви можете використовувати:

string = string.replacingOccurrences(of: "potatoes", with: "", options: NSString.CompareOptions.literal, range: nil)

Якщо ви хочете використовувати деякі інші символи у своєму жалі, використовуйте:

  • Нульовий символ (\ 0)
  • Зворотний слеш (\)
  • Горизонтальна вкладка (\ t)
  • Рядок подачі (\ n)
  • Повернення каретки (\ r)
  • Подвійна лапка (\ ")
  • Одинарна пропозиція (\ ')

Приклад:

string = string.replacingOccurrences(of: "potatoes", with: "dog\'s toys", options: NSString.CompareOptions.literal, range: nil)

Вихід: "dog's toys + carrots"


Це найпростіший та найефективніший спосіб зробити це. Натомість змінює саму змінну замість того, щоб створювати нову. Я наполегливо намагався пояснити це найкращим чином, тому, будь ласка, не забудьте підтримати цю відповідь.
Міні офіційний

0

Ви створили екземпляр text2 як необов’язковий (наприклад, var text2: String?). Ось чому ви отримуєте необов’язковий ("5") у вашому рядку. забрати? і замінити на:

var text2: String = ""

0

Якщо ви отримуєте вихідні дані Optional(5)при спробі надрукувати значення 5в необов’язковому Int або String , вам слід спочатку розгорнути значення:

if let value = text {
    print(value)
}

Тепер у вас є значення без рядка "Необов’язково", який Swift додає, коли значення не розгорталося раніше.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.