Java >> Java tutorial >  >> Tag >> String

Sammenkædning af nulstrenge i Java

1. Oversigt

Java tilbyder en række metoder og klasser til sammenkædning af streng s. Men den resulterende streng kan indeholde nogle uønskede værdier, hvis vi ikke er opmærksomme på null genstande.

I denne vejledning vil vi se nogle metoder til at undgå null streng objekter, mens du sammenkæder streng s.

2. Problemformulering

Lad os sige, at vi ønsker at sammenkæde elementerne i en streng array, hvor et hvilket som helst af elementerne kan være null .

Vi kan simpelthen gøre dette ved at bruge +-operatoren:

String[] values = { "Java ", null, "", "is ", "great!" };
String result = "";

for (String value : values) {
    result = result + value;
}

Dette vil sammenkæde alle elementer i den resulterende streng , som vist nedenfor:

Java nullis great!

Men vi ønsker måske ikke at vise eller tilføje sådanne "nul"-værdier til outputtet.

På samme måde får vi det samme output ved at bruge String.join() statisk metode, hvis vores applikation kører på Java 8 eller nyere version:

String result = String.join("", values);

Vi kan ikke undgå at null-elementer bliver sammenkædet, mens vi bruger String.join() metode enten.

Lad os se nogle metoder til at undgå disse null elementer fra at blive sammenkædet og få det resultat, vi ville forvente:"Java er fantastisk!".

3. Brug af +-operatøren

Tilføjelsesoperatoren (+) er overbelastet for at sammenkæde streng s i Java. Mens vi sammenkæder ved hjælp af +-operatoren, kan vi kontrollere, om strengen  er nul , og erstat null streng med en tom ("") streng:

for (String value : values) {
    result = result + (value == null ? "" : value);
}

assertEquals("Java is great!", result);

Alternativt kan vi udtrække koden, der kontrollerer for en nul streng ind i en hjælpemetode, der accepterer en streng objekt og returnerer en ikke-nul streng objekt:

for (String value : values) {
    result = result + getNonNullString(value);
}

Her, getNonNullString()  metode er vores hjælpermetode. Den tjekker simpelthen efter null reference for input String objekt. Hvis inputobjektet er null , returnerer den en tom (“”) streng , ellers returnerer den den samme streng :

return value == null ? "" : value;

Men som vi ved, String objekter er uforanderlige i Java. Det betyder, at hver gang vi sammenkæder streng objekter ved hjælp af +-operatoren, opretter den en ny streng i hukommelsen. Så det viser sig at være dyrt at bruge +-operatoren til sammenkædning.

Derudover kan vi bruge denne tilgang til at skabe en hjælpemetode til at tjekke for null streng objekter i forskellige andre sammenkædningsunderstøttende operationer. Lad os tage et kig på nogle af dem.

4. Brug String.concat() M metode

Str ing.conca t () metode er et godt valg, når vi ønsker at sammenkæde streng genstande.

Her kan vi bruge vores getNonNullString() metode, der søger efter en null objekt og returnerer en tom streng :

for (String value : values) {
    result = result.concat(getNonNullString(value));
}

Den tomme streng returneret af getNonNullString() metode bliver sammenkædet med resultatet og ignorerer således null genstande.

5. Brug af StringBuilder Klasse

StringBuilder  giver en masse nyttige og praktiske String byggemetoder. En af dem er append() metode.

Også her kan vi bruge den samme getNonNullString() metode til at undgå null objekter, mens du bruger append() metode:

for (String value : values) {
    result = result.append(getNonNullString(value));
}

6. Brug af StringJoiner Klasse (Java 8+)

StringJoiner klasse giver al funktionaliteten af ​​String.join() sammen med en mulighed for at starte med et givet præfiks og slutte med et givet suffiks. Vi kan bruge dens add() metode til at sammenkæde strengen s.

Som før kan vi bruge vores hjælpemetode getNonNullString()  for at undgå null streng værdier fra at blive sammenkædet:

StringJoiner result = new StringJoiner("");

for (String value : values) {
    result = result.add(getNonNullString(value));
}

En forskel mellem String.join() og StringJoiner er det i modsætning til String.join() , skal vi gå gennem samlingen (Array, List, osv.) for at forbinde alle elementerne.

7. Brug af Streams.filter (Java 8+)

Strømmen API giver et betydeligt antal sekventielle og parallelle aggregerede operationer. En sådan mellemstrømsoperation er filter  som accepterer et prædikat  som input og transformerer Strømmen ind i en anden Strøm baseret på det givne prædikat.

Så vi kan definere et prædikat  der vil søge efter null værdien af ​​en streng og videregive dette prædikat  til filter() metode. Følgelig er filteret vil bortfiltrere disse null værdier fra den originale Strøm.

I sidste ende kan vi slutte os til alle de ikke-null streng værdier ved hjælp af Collectors.joining() og til sidst, saml den resulterende Strøm ind i en streng variabel:

result = Stream.of(values).filter(value -> null != value).collect(Collectors.joining(""));

8. Konklusion

I denne artikel illustrerede vi forskellige tilgange til at undgå sammenkædning af null streng genstande. Der vil altid være mere end én rigtig tilgang til at opfylde vores krav. Så vi er nødt til at bestemme, hvilken tilgang der passer bedst på et givet sted.

Vi skal huske på den sammenkædede streng  i sig selv kunne være en dyr operation, især i sløjfer. Så det er altid tilrådeligt at tage hensyn til ydeevneaspekterne af Java strengen API.

Og som altid er koden til disse eksempler tilgængelig på GitHub.


Java tag