Swift - Xóa ký tự "khỏi chuỗi


81

Tôi có một chuỗi là "Tùy chọn (" 5 ")". Tôi cần xóa "" xung quanh 5. Tôi đã xóa "Tùy chọn" bằng cách thực hiện:

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

Tôi đang gặp khó khăn khi xóa các ký tự "khi chúng chỉ định phần cuối của một chuỗi trong mã.


22
Nếu chuỗi thực sự bao gồm các ký tự Optional("5")thì có thể đã xảy ra sự cố trước đó, bởi vì đó là mô tả của một chuỗi tùy chọn. Sẽ hợp lý hơn nếu bạn mở gói tùy chọn trước khi gán cho text2, thay vì xóa "Tùy chọn (..)" theo văn bản.
Martin R,

Câu trả lời:


166

Swift sử dụng dấu gạch chéo ngược để thoát khỏi dấu ngoặc kép. Đây là danh sách các ký tự đặc biệt đã thoát trong Swift:

  • \0 (ký tự rỗng)
  • \\ (dấu gạch chéo ngược)
  • \t (Tab ngang)
  • \n (nguồn cấp dữ liệu dòng)
  • \r (vận chuyển trở lại)
  • \" (dấu ngoặc kép)
  • \' (trích dẫn duy nhất)

Điều này sẽ hoạt động:

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

1
Thật không may với Swift 1.2, điều này dường như không hoạt động trên các thiết bị 32 bit.
PassKit

1
@GerardGrundy Cảm ơn bạn rất nhiều về nhận xét! Tôi đã cập nhật câu trả lời để làm cho nó tương thích với phiên bản Swift hiện đại.
Sergey Kalinichenko

57

Swift 3 và Swift 4:

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

Các tài liệu mới nhất được cập nhật lên Swift 3.0.1 có:

  • Ký tự rỗng ( \0)
  • Dấu gạch chéo ngược ( \\)
  • Tab Ngang ( \t)
  • Nguồn cấp dữ liệu dòng ( \n)
  • Vận chuyển trở lại ( \r)
  • Dấu ngoặc kép ( \")
  • Trích dẫn đơn ( \')
  • Unicode vô hướng ( \u{n}), trong đó n nằm giữa một và tám chữ số thập lục phân

Nếu bạn cần thêm chi tiết, bạn có thể xem tài liệu chính thức tại đây


26

Đây là câu trả lời cập nhật nhanh chóng 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})

Đây là một cách làm sạch hơn nhiều.
Super_Simon

8

Để xóa tùy chọn, bạn chỉ nên làm điều này

println("\(text2!)")

nguyên nhân nếu bạn không sử dụng "!" nó lấy giá trị tùy chọn của text2

Và để loại bỏ "" khỏi 5, bạn phải chuyển đổi nó thành NSInteger hoặc NSNumber dễ dàng. Nó có "" nguyên nhân là một chuỗi.


1
nên kiểm tra nó không phải là nil trước, nếu không điều này sẽ tạo ra một ngoại lệ.
CW0007007

6

Cuối cùng tôi đã nhận được điều này để hoạt động trong sân chơi, có nhiều ký tự mà tôi đang cố gắng xóa khỏi một chuỗi:

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
Bạn có thể vui lòng làm rõ: câu hỏi đang được hỏi ở đây là gì?
milez

5

Nếu bạn muốn xóa nhiều ký tự hơn, chẳng hạn như "a", "A", "b", "B", "c", "C" khỏi chuỗi, bạn có thể thực hiện theo cách này:

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

4

Như Martin R nói, chuỗi "Tùy chọn (" 5 ")" của bạn có vẻ như bạn đã làm sai điều gì đó.

dasblinkenlight trả lời bạn như vậy là ổn, nhưng đối với những người đọc trong tương lai, tôi sẽ cố gắng thêm mã thay thế như:

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

text2 trong ví dụ của bạn trông giống như Chuỗi và nó có thể đã được đặt thành "" nhưng có vẻ như bạn có một Chuỗi gốc của bạn thuộc loại Tùy chọn (Chuỗi) ở đâu đó mà nó không được truyền hoặc sử dụng đúng cách.

Tôi hy vọng điều này có thể giúp một số người đọc.


1
Điều đó có thể được đơn giản hóa hơn một chút với toán tử nil-coescing, ví dụ let resultingString = optionalString ?? "".
Kilian

4

Thay thế cho Loại bỏ không hoàn toàn hợp lý. String.filter cho phép lặp một chuỗi ký tự theo ký tự ký tự và chỉ giữ lại khẳng định đúng.

Swift 4 & 5

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

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

> Optional(5)

Hoặc để mở rộng

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

let filteredChars = "\"\n\t"

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

> Optional(5)

Xin lỗi Luc, ví dụ thứ hai của bạn đưa ra thông báo lỗi. Loại đối số 'String.Element' (hay còn gọi là 'Character') không phù hợp với loại mong đợi 'StringProtocol' .. Tôi đoán bạn đã bỏ lỡ điều gì đó?
user3069232

2

Giả sử bạn có một chuỗi:

var string = "potatoes + carrots"

Và bạn muốn thay thế từ "khoai tây" trong chuỗi đó bằng "cà chua"

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

Nếu bạn in chuỗi của mình, bây giờ nó sẽ là: "tomatoes + carrots"

Nếu bạn muốn loại bỏ hoàn toàn từ khoai tây khỏi vết đốt, bạn có thể sử dụng:

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

Nếu bạn muốn sử dụng một số ký tự khác trong stt của mình, hãy sử dụng:

  • Ký tự rỗng (\ 0)
  • Dấu gạch chéo ngược (\)
  • Tab Ngang (\ t)
  • Nguồn cấp dữ liệu Dòng (\ n)
  • Vận chuyển trở lại (\ r)
  • Dấu ngoặc kép (\ ")
  • Trích dẫn đơn (\ ')

Thí dụ:

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

Đầu ra: "dog's toys + carrots"


Đây là cách đơn giản và hiệu quả nhất để làm điều này. Thay vào đó, thay đổi chính biến thay vì tạo một biến mới. Tôi đã cố gắng giải thích điều này theo cách tốt nhất có thể, vì vậy hãy nhớ ủng hộ câu trả lời này.
Chính thức nhỏ

0

Bạn đã khởi tạo text2 dưới dạng Tùy chọn (ví dụ: var text2: String?). Đây là lý do tại sao bạn nhận được Tùy chọn ("5") trong chuỗi của mình. lấy đi? và thay thế bằng:

var text2: String = ""

0

Nếu bạn nhận được kết quả đầu ra Optional(5)khi cố gắng in giá trị của 5trong một tùy chọn chuỗi Int hoặc chuỗi , bạn nên mở gói giá trị trước:

if let value = text {
    print(value)
}

Bây giờ bạn đã có giá trị mà không có chuỗi "Tùy chọn" mà Swift thêm vào khi giá trị chưa được mở trước đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.