Merkkijonosta lainausmerkkien poistaminen

Clojure:
Merkkijonosta lainausmerkkien poistaminen

Kuinka:

Clojuressa merkkijonot ovat muuttumattomia, joten kun puhumme “lainausmerkkien poistamisesta”, puhumme oikeastaan uuden merkkijonon luomisesta ilman lainausmerkkejä. Tässä tiivistelmä käyttäen clojure.string/replace:

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

; Heitetäänpä nuo kaksoislainausmerkit mäkeen
(defn remove-double-quotes [s]
  (str/replace s #"\"" ""))

; Ja potkaistaan ulos yksinkertaiset lainausmerkit
(defn remove-single-quotes [s]
  (str/replace s #"\'" ""))

; Esimerkkikäyttö:
(remove-double-quotes "\"Hei, maailma!\"") ; => "Hei, maailma!"
(remove-single-quotes "'Hei, maailma!'")   ; => "Hei, maailma!"

Haluatko käsitellä sekä yksinkertaiset että kaksoislainausmerkit yhdellä iskulla? Kurkista tähän:

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

; Esimerkkikäyttö:
(remove-quotes "\"Hei, 'Clojure' maailma!\"") ; => "Hei, Clojure maailma!"

Syväsukellus

Aikoinaan, kun data oli sotkuisempaa kuin lapsen makuuhuone, lainausmerkit merkkijonoissa olivat normi tekstin merkitsemiseksi. Mutta tietojenkäsittelytieteen kehittyessä lainausmerkit muuttuivat enemmäksi kuin vain tekstierottimiksi - niille annettiin myös syntaktisia rooleja ohjelmointikielissä.

Clojure, sen Lisp-perinnön ansiosta, ei käytä lainausmerkkejä samalla tavalla kuin jotkin muut kielet saattavat. Ne ovat toki merkkijonojen merkitsemiseen, mutta niillä on myös erityinen rooli literaalien luomisessa. Riippumatta siitä, lainausmerkkien poistaminen merkkijonoista pysyy ajattomana tehtävänä.

Miksi et vain leikkaa merkkijonon päitä? No, se olettaa lainausmerkkiesi aina halaavan merkkijonosi alkua ja loppua kuin pari ylisöpöilevää isovanhempaa. Todellinen data on sotkuisempaa. Tässä tulevat avuksi regex (säännölliset lausekkeet), joiden avulla voit tähdätä noihin lainausmerkkeihin riippumatta siitä, missä ne piileskelevät.

Vaihtoehtoja? Toki, voit hifistellä subs, trim, triml, trimr:llä tai jopa transduserilla, jos haluat rehvastella. Mutta replace regex:llä on kuin toisit valomiekan veitsitaisteluun - se menee suoraan asiaan.

Katso Myös

Jos aivosi kaipaavat lisää Clojuren merkkijonojen käsittelyn herkkuja, nämä vihjeet saattavat auttaa:

Älä pysähdy vain lainausmerkkien poistamiseen. Clojure-maassa on kokonainen maailma merkkijonotaikuutta odottamassa löytämistään.