/ / Problem z dzieleniem ciągu oddzielonego spacjami, gdy ciąg zawiera podwójne cudzysłowy w swift - ios, swift, string

Problem z rozdzielaniem spacji, gdy łańcuch zawiera podwójne cudzysłowy w swift - ios, swift, string

Zastosowano poniższy kod, aby oddzielić komponenty ciągów spacjami:

let string = "ABC DEF"
let arrayString = string.components(separatedBy: " ")

i uzyskanie wyjścia ["ABC", "DEF"] który jest poprawny.

Problem występuje, gdy ciąg zawiera Podwójne cytaty. Dodano tekst w textfield i używając tekstu textfield bezpośrednio, aby oddzielić go przestrzenią.

Ciąg w polu tekstowym to Add sfc"" i używając tego samego kodu, uzyskując dane wyjściowe co ["add", "sfc"""]

Czy ktoś może mi pomóc, dlaczego jest dodawany, gdy ciąg znaków zawiera podwójne cudzysłowy. Co mogę zrobić, aby go usunąć?

Odpowiedzi:

3 dla odpowiedzi № 1

Tak się dzieje, gdy drukujesz tablicę ciągów.

print(["", ""])

drukuje

["", ""]

Tablica zawiera dwa elementy, które są pustymi ciągami, a jednocześnie dwoma znakami cudzysłowu - "" - są zamiast tego drukowane. Dzieje się tak, ponieważ jeśli ciąg jest drukowany dosłownie:

[, ]

Nie wyglądałoby to tak „ładnie”. Mniej jasne jest, że istnieją dwa puste łańcuchy.

Możesz myśleć o tym w ten sposób:

Tablice łańcuchowe są drukowane tak, jakby znajdowały się w kodzie

Dlatego są odwrotne ukośniki. Wyobraź sobie, że jeśli to jest w Twoim kodzie, jak napisałeś literał ciągu, który reprezentuje ciąg sfc""? Ty byś pisał "sfc"""", dobrze? Więc to właśnie zostało wydrukowane.

Odwrotnych ukośników tak naprawdę tam nie ma, to tylko po to, aby uciec od strun dla jasności.

Wydrukuj każdy element tablicy osobno i zobaczysz, że zniknęły:

print(["", ""][0]) // prints nothing

2 dla odpowiedzi nr 2

Ukośniki odwrotne są dodawane (wirtualnie) podczas używania print lub String(description: aby móc wyświetlać podwójne cudzysłowy w ciągu literału. Właściwie one nie istnieją.

Możesz to udowodnić na placu zabaw.

wprowadź opis obrazu tutaj