Forberedelse til kodeintervjuer · leksjon

Analyse og formatering av tekststrenger

SUBSTRING, plassering, splitting og konvertering av store og små bokstaver på tvers av dialekter.

Leksjon 3 av 413 trinn

Analyse og formatering av tekststrenger er en gratis leksjon i Forberedelse til kodeintervjuer på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Forberedelse til kodeintervjuer, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Forberedelse til kodeintervjuer inneholder totalt 4 leksjoner.

Hvorfor strengfunksjoner blir spurt om

Reelle data er rotete: Fullstendige navn som må deles opp, e-postdomener som må hentes ut, koder som ligger innebygd i ID-er, og inkonsekvent bruk av store og små bokstaver. Intervjuere bruker strengmanipulering for å se om De kan rense og omforme tekst uten å eksportere den til et skript.

Som med datoer er funksjonene bare løst standardiserte, så målet er å kjenne konseptet og de vanligste variantene.

  • Uthenting av delstrenger og posisjon
  • Sammenslåing
  • Oppdeling og erstatning
  • Konvertering av store og små bokstaver samt trimming

SUBSTRING og posisjon

SUBSTRING(s FROM start FOR length) er formen i SQL-standarden; de fleste motorer godtar også SUBSTRING(s, start, length). Strengposisjoner er 1-baserte, en klassisk feil med én forskyvning for programmerere som er vant til 0-baserte språk.

POSITION(sub IN s) (eller STRPOS/CHARINDEX) finner hvor en delstreng begynner, og returnerer 0 når den ikke finnes.

SELECT
  SUBSTRING('INV-2024-042' FROM 5 FOR 4) AS year,   -- '2024'
  POSITION('-' IN 'INV-2024-042')        AS first_dash; -- 4

Uthenting av et e-postdomene

Et klassisk gjennomarbeidet eksempel. Finn @, og hent deretter alt som kommer etter den. Å kombinere POSITION med SUBSTRING er den portable fremgangsmåten.

I PostgreSQL kan De også bruke SPLIT_PART(email, '@', 2), som er mer lesbart og er verdt å nevne som det idiomatiske svaret.

-- Portable
SELECT SUBSTRING(email FROM POSITION('@' IN email) + 1) AS domain
FROM users;

-- Postgres idiom
SELECT SPLIT_PART(email, '@', 2) AS domain FROM users;

Sammenslåing på tvers av dialekter

Sammenslåing av strenger avhenger av SQL-dialekten, og intervjuere forventer at De kjenner variantene.

  • SQL-standarden / Postgres / Oracle: operatoren ||.
  • MySQL: CONCAT(a, b, c) (operatoren || er som standard logisk OR).
  • SQL Server: + for strenger, eller CONCAT().

CONCAT() behandler NULL som en tom streng, mens || og + vanligvis gjør hele resultatet til NULL hvis en operand er NULL, noe som kan føre til subtile feil.

-- Postgres
SELECT first_name || ' ' || last_name AS full_name FROM people;

-- MySQL / SQL Server
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM people;

Fellen ved NULL i strengsammenslåing

Som en oppfølging av forrige scene: Hvis last_name er NULL, gir first_name || ' ' || last_name NULL i Postgres, slik at hele navnet forsvinner.

Den defensive løsningen er å bruke COALESCE på deler som kan være NULL, eller å bruke CONCAT_WS (sammenslåing med skilletegn), som hopper over NULL-verdier og bare setter inn skilletegnet mellom verdier som finnes.

-- Safe in Postgres / MySQL
SELECT CONCAT_WS(' ', first_name, last_name) AS full_name FROM people;

-- Or guard each part
SELECT first_name || ' ' || COALESCE(last_name, '') FROM people;

Oppdeling av strenger

«Hent ut det tredje segmentet fra en kode med bindestreker» tester oppdeling av strenger. PostgreSQLs SPLIT_PART(s, delim, n) returnerer den n-te delen direkte og er det ryddigste verktøyet.

MySQL har ingen direkte funksjon for oppdeling; idiomet er nøstet SUBSTRING_INDEX: Hent de første n delene, og hent deretter den siste av disse.

-- Postgres
SELECT SPLIT_PART('a-b-c-d', '-', 3); -- 'c'

-- MySQL: third part of a-b-c-d
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a-b-c-d', '-', 3), '-', -1); -- 'c'

Erstatning, trimming og utfylling

Renseoperasjoner intervjuere forventer at De kjenner med en gang:

  • REPLACE(s, from, to) erstatter alle forekomster.
  • TRIM(s) fjerner mellomrom i begynnelsen og slutten; TRIM(BOTH 'x' FROM s) fjerner et bestemt tegn.
  • LPAD(s, len, ch) / RPAD fyller ut til en fast bredde, noe som er nyttig for ID-er med innledende nuller.
SELECT
  REPLACE('555.123.4567', '.', '-') AS phone,   -- 555-123-4567
  TRIM('   hello   ')               AS clean,   -- 'hello'
  LPAD('42', 6, '0')                AS padded;   -- '000042'

Konvertering av store og små bokstaver samt lengde

Normalisering av store og små bokstaver er avgjørende før tekst sammenlignes eller grupperes. UPPER og LOWER finnes overalt; INITCAP (Postgres/Oracle) gjør ord om til tittelformat.

LENGTH(s) returnerer antallet tegn i de fleste motorer, men vær oppmerksom på at SQL Server bruker LEN(), og at LENGTH i enkelte konfigurasjoner teller byte for tekst med flerbyte-tegn. Nevn denne nyansen for data som ikke er ASCII.

SELECT
  LOWER(email)        AS email_norm,
  INITCAP(city)       AS city_pretty,  -- Postgres
  LENGTH(description)  AS chars
FROM places;

Mønstergjenkjenning utover LIKE

Når LIKE ikke er kraftig nok, liker intervjuere å se at De kjenner til regulære uttrykk. PostgreSQL tilbyr operatoren ~ og REGEXP_REPLACE / REGEXP_MATCHES; MySQL har REGEXP / REGEXP_SUBSTR.

Eksempel: Behold bare sifrene i en telefonstreng. Med regulære uttrykk kan dette gjøres på én linje i stedet for med en kjede av REPLACE-kall.

-- Postgres: strip non-digits
SELECT REGEXP_REPLACE('(555) 123-4567', '[^0-9]', '', 'g')
  AS digits; -- '5551234567'

Dypere eksempel: Normalisering og deduplisering av navn

En kombinert renseoppgave. Anta at navn kommer inn med overflødige mellomrom og en blanding av store og små bokstaver, noe som skaper falske duplikater. Normaliser først, og grupper deretter.

Trim teksten, slå sammen interne mellomrom med regulære uttrykk, og konverter til små bokstaver før De teller unike verdier. Dette er akkurat den typen flerstegsresonnering intervjuere belønner.

SELECT
  LOWER(REGEXP_REPLACE(TRIM(name), '\s+', ' ', 'g')) AS norm_name,
  COUNT(*) AS occurrences
FROM contacts
GROUP BY 1
ORDER BY occurrences DESC;

Konvertering av strenger til tall og datoer

Strengkolonner inneholder ofte verdier som egentlig burde være tall eller datoer. CAST(s AS INTEGER) eller Postgres-kortformen s::int konverterer verdien, men mislykkes ved ugyldige inndata.

For datoer analyserer TO_DATE(s, 'YYYY-MM-DD') (Postgres/Oracle) verdien med en eksplisitt formatmaske. Dette er den tryggeste fremgangsmåten fordi den fjerner tvil om rekkefølgen på dag og måned.

SELECT
  CAST(qty_text AS INTEGER)            AS qty,
  TO_DATE(order_str, 'DD/MM/YYYY')     AS order_date
FROM staging;

Kort kontroll

Resonner over NULL-oppførsel ved strengsammenslåing.

Oppsummering: Analyse og formatering av strenger

Viktige punkter å ta med seg til intervjuet:

  • Strengposisjoner er 1-baserte; SUBSTRING + POSITION henter ut tekst etter posisjon.
  • Slå sammen med || (Postgres), CONCAT (MySQL) eller + (SQL Server), og husk NULL-forplantning; foretrekk CONCAT_WS.
  • Del opp med SPLIT_PART (Postgres) eller nøstet SUBSTRING_INDEX (MySQL).
  • REPLACE, TRIM, LPAD, UPPER/LOWER renser og normaliserer; regulære uttrykk håndterer de vanskelige tilfellene.
  • Normaliser store og små bokstaver samt mellomrom før gruppering for å unngå falske duplikater.
Gratis å komme i gang

Lær deg Forberedelse til kodeintervjuer med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
90
Leksjoner
360

Ofte stilte spørsmål

Er leksjonen «Analyse og formatering av tekststrenger» gratis?

Ja – hele teksten i «Analyse og formatering av tekststrenger» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Forberedelse til kodeintervjuer-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Forberedelse til kodeintervjuer inneholder totalt 4 leksjoner.

Hva lærer jeg i «Analyse og formatering av tekststrenger»?

SUBSTRING, plassering, splitting og konvertering av store og små bokstaver på tvers av dialekter. Du øver på Forberedelse til kodeintervjuer med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Forberedelse til kodeintervjuer?

Ingen tidligere erfaring er nødvendig. Forberedelse til kodeintervjuer på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Analyse og formatering av tekststrenger»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Forberedelse til kodeintervjuer-leksjonen?

Ja. Alle Forberedelse til kodeintervjuer-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Datoregning og intervaller
  2. Avkorting og gruppering av datoer
  3. Analyse og formatering av tekststrenger
  4. Tidssoner og tidsstempler
← Tilbake til Forberedelse til kodeintervjuer