Array to String Conversions

1. Oversikt

I denne korte opplæringen skal vi se på å konvertere en rekke strenger eller heltall til en streng og tilbake igjen.

Vi kan oppnå dette med vanilje Java og Java verktøy klasser fra ofte brukte biblioteker.

2. Konverter Array til String

Noen ganger trenger vi å konvertere en rekke strenger eller heltall til en streng, men dessverre er det ingen direkte metode for å utføre denne konverteringen.

Standard implementering av toString () metode på en matrise returnerer noe sånt Ljava.lang.String; @ 74a10858 som bare informerer oss om objektets type og hash-kode.

Imidlertid, den java.util.Arrayer utility class støtter array- og strengmanipulering, inkludert a toString () metode for arrays.

Arrays.toString () returnerer en streng med innholdet i inndata-arrayet. Den nye strengen som er opprettet, er en kommaavgrenset liste over matriseelementene, omgitt av firkantede parenteser (“[]”):

String [] strArray = {"one", "two", "three"}; String joinedString = Arrays.toString (strArray); assertEquals ("[one, two, three]", joinedString);
int [] intArray = {1,2,3,4,5}; joinedString = Arrays.toString (intArray); assertEquals ("[1, 2, 3, 4, 5]", joinedString);

Og selv om det er flott at Arrays.toString (int []) metodeknapper denne oppgaven for oss så pent, la oss sammenligne den med forskjellige metoder som vi kan implementere på egen hånd.

2.1. StringBuilder.append ()

For å starte, la oss se på hvordan du gjør denne konverteringen med StringBuilder.append ():

String [] strArray = {"Convert", "Array", "With", "Java"}; StringBuilder stringBuilder = ny StringBuilder (); for (int i = 0; i <strArray.length; i ++) {stringBuilder.append (strArray [i]); } Streng joinedString = stringBuilder.toString (); assertEquals ("ConvertArrayWithJava", joinedString);

I tillegg, for å konvertere en rekke heltall, kan vi bruke samme tilnærming, men i stedet ringe Integer.valueOf (intArray [i]) når du legger til vår StringBuilder.

2.2. Java Streams API

Java 8 og nyere tilbyr String.join () metode som produserer en ny streng ved å koble sammen elementer og skille dem med den angitte skilletegn, i vårt tilfelle bare tom streng:

String joinedString = String.join ("", new String [] {"Convert", "With", "Java", "Streams"}); assertEquals ("ConvertWithJavaStreams", joinedString);

I tillegg kan vi bruke Collectors.joining () metode fra Java Streams API som kobles til strenger fra Strøm i samme rekkefølge som kildearrayen:

String joinedString = Arrays .stream (new String [] {"Convert", "With", "Java", "Streams"}) .collect (Collectors.joining ()); assertEquals ("ConvertWithJavaStreams", joinedString);

2.3. StringUtils.join ()

Og Apache Commons Lang skal aldri utelates fra oppgaver som disse.

De StringUtils klasse har flere StringUtils.join () metoder som kan brukes til å endre en rekke strenger til en enkelt streng:

String joinedString = StringUtils.join (ny String [] {"Convert", "With", "Apache", "Commons"}); assertEquals ("ConvertWithApacheCommons", joinedString);

2.4. Joiner.join ()

Og ikke å bli overgått, Guava rommer det samme med sitt Snekker klasse. De Snekker klasse tilbyr et flytende API og gir en håndfull hjelpemetoder for å bli med data.

For eksempel kan vi legge til en skilletegn eller hoppe over nullverdier:

String joinedString = Joiner.on ("") .skipNulls () .join (new String [] {"Convert", "With", "Guava", null}); assertEquals ("ConvertWithGuava", joinedString);

3. Konverter streng til streng av strenger

På samme måte må vi noen ganger dele en streng i en matrise som inneholder en delmengde av inngangsstreng delt av den angitte skillelinjen, la oss se hvordan vi også kan gjøre dette.

3.1. String.split ()

For det første, la oss begynne med å dele det hvite området med String.split () metode uten avgrensning:

String [] strArray = "loremipsum" .split ("");

Som produserer:

["l", "o", "r", "e", "m", "i", "p", "s", "u", "m"]

3.2. StringUtils.split ()

For det andre, la oss se igjen på StringUtils klasse fra Apache's Commons Lang-bibliotek.

Blant mange null-sikre metoder på strengobjekter kan vi finne StringUtils.split (). Som standard antar det en mellomrom:

String [] splitted = StringUtils.split ("lorem ipsum dolor sit amet");

Som resulterer i:

["lorem", "ipsum", "dolor", "sit", "amet"]

Men vi kan også gi en avgrensning hvis vi vil.

3.3. Splitter.split ()

Endelig kan vi også bruke Guava med dens Splitter flytende API:

List resultList = Splitter.on ('') .trimResults () .omitEmptyStrings () .splitToList ("lorem ipsum dolor sit amet"); Streng [] strArray = resultList.toArray (ny streng [0]);

Som genererer:

["lorem", "ipsum", "dolor", "sit", "amet"]

4. Konklusjon

I denne artikkelen illustrerte vi hvordan du konverterer en matrise til streng og tilbake igjen ved hjelp av kjerne Java og populære verktøybiblioteker.

Selvfølgelig kan implementeringen av alle disse eksemplene og kodebiter finnes på GitHub.