Usuwanie cudzysłowów z ciągu znaków

Clojure:
Usuwanie cudzysłowów z ciągu znaków

Jak to zrobić:

W Clojure łańcuchy znaków są niezmienne, więc kiedy mówimy o “usuwanie cudzysłowów”, naprawdę mówimy o tworzeniu nowego łańcucha znaków bez cudzysłowów. Oto sposób użycia clojure.string/replace:

(require '[clojure.string :as str])

; Pozbądźmy się tych podwójnych cudzysłowów
(defn remove-double-quotes [s]
  (str/replace s #"\"" ""))

; I wyeliminujmy pojedyncze cudzysłowy
(defn remove-single-quotes [s]
  (str/replace s #"\'" ""))

; Przykładowe użycie:
(remove-double-quotes "\"Cześć, Świecie!\"") ; => "Cześć, Świecie!"
(remove-single-quotes "'Cześć, Świecie!'")   ; => "Cześć, Świecie!"

Chcesz poradzić sobie zarówno z pojedynczymi, jak i podwójnymi cudzysłowami za jednym zamachem? Spójrz na to:

(defn remove-quotes [s]
  (str/replace s #"[\"\']" ""))

; Przykładowe użycie:
(remove-quotes "\"Cześć, 'Clojure' Świecie!\"") ; => "Cześć, Clojure Świecie!"

Głębsze zanurzenie

W dawnych czasach, gdy dane były bardziej nieporządne niż pokój dziecięcy, cudzysłowy w łańcuchach znaków były normą do oznaczania tekstu. Ale wraz z ewolucją informatyki, cudzysłowy stały się czymś więcej niż tylko delimiterami tekstu – przejęły role syntaktyczne w językach programowania.

Clojure, z jego dziedzictwem Lispu, nie używa cudzysłowów w ten sam sposób co niektóre inne języki. Z pewnością są używane do oznaczania łańcuchów znaków, ale mają też specjalną rolę w tworzeniu literałów. Niemniej jednak, usuwanie cudzysłowów z łańcuchów znaków pozostaje ponadczasowym zadaniem.

Dlaczego nie wystarczy po prostu obciąć końców łańcucha znaków? Cóż, to zakłada, że twoje cudzysłowy zawsze przytulają początek i koniec twojego łańcucha niczym para zbyt czułych dziadków. Rzeczywiste dane są bardziej nieuporządkowane. Tu na scenę wkraczają wyrażenia regularne (regex), które pozwalają ci celować w te cudzysłowy, niezależnie od tego, gdzie się ukrywają.

Alternatywy? Jasne, możesz zaszaleć z subs, trim, triml, trimr, czy nawet z transduktorami, jeśli chcesz popisać się umiejętnościami. Ale replace z regexem to jak przynieść miecz świetlny na walkę na noże – idzie prosto do celu.

Zobacz również

Jeśli twój mózg pragnie więcej dobroci związanej z manipulacją łańcuchami znaków w Clojure, te okruchy informacji mogą pomóc:

Nie zatrzymuj się tylko na usuwaniu cudzysłowów. W Clojure-landii czeka do odkrycia cały świat czarów ze łańcuchami znaków.