Konvertering af streng til stream af tegn

1. Oversigt

Java 8 introducerede Strøm API med funktionel-lignende operationer til behandling af sekvenser. Hvis du vil læse mere om det, skal du kigge på denne artikel.

I denne hurtige artikel vil vi se, hvordan man konverterer en Snor til en Strøm af enkeltpersoner.

2. Konvertering ved hjælp af tegn ()

Det Snor API har en ny metode - tegn () - som vi kan få en forekomst af Stream fra en Snor objekt. Denne enkle API returnerer en forekomst af IntStrøm fra input Snor.

Kort fortalt, IntStream indeholder et heltal repræsentation af tegnene fra Snor objekt:

String testString = "Streng"; IntStream intStream = testString.chars ();

Det er muligt at arbejde med heltalets repræsentation uden at konvertere dem til deres Karakter tilsvarende. Dette kan føre til nogle mindre præstationsgevinster, da der ikke er behov for at sætte hvert heltal i en Karakter objekt.

Men hvis vi skal vise tegnene til læsning, er vi nødt til at konvertere heltalene til det menneskelige Karakter form:

Stream characterStream = testString.chars () .mapToObj (c -> (char) c);

3. Konvertering ved hjælp af codePoints ()

Alternativt kan vi bruge codePoints () metode til at få en forekomst af IntStream fra en Snor. Fordelen ved at bruge denne API er, at Unicode-supplerende tegn kan håndteres effektivt.

Supplerende tegn er repræsenteret af Unicode-surrogatpar og flettes sammen til et enkelt kodepunkt. På denne måde kan vi korrekt behandle (og vise) ethvert Unicode-symbol:

IntStream intStream1 = testString.codePoints ();

Vi skal kortlægge det returnerede IntStream til Strøm for at vise det for brugerne:

Stream characterStream2 = testString.codePoints (). MapToObj (c -> (char) c); 

4. Konvertering til a Strøm af enkelt karakter Strenge

Indtil videre har vi været i stand til at få en Strøm af tegn; hvad hvis vi vil have en Strøm af enkelt karakter Snors i stedet?

Ligesom specificeret tidligere i artiklen bruger vi enten codePoints () eller tegn () metoder til at opnå en forekomst af IntStream som vi nu kan kortlægge til Strøm.

Kortlægningsprocessen involverer først konvertering af heltalsværdierne til deres respektive tegnækvivalenter.

Så kan vi bruge String.valueOf () eller Character.toString () at konvertere tegnene til en Snor objekt:

Stream stringStream = testString.codePoints () .mapToObj (c -> String.valueOf ((char) c));

5. Konklusion

I denne hurtige vejledning lærer vi at få en strøm af Karakter fra en Snor modstand ved enten at ringe codePoints () eller tegn () metoder.

Dette giver os mulighed for at drage fuld fordel af Strøm API - til bekvemt og effektivt at manipulere tegn.

Som altid kan kodeuddrag findes på GitHub.