Ta bort skiljetecken från en sträng i Java

Under textbehandling, oavsett om du söker efter vissa ord och gör mönstermatchningsregler, räknar frekvensen av element, etc. – kan skiljetecken kasta en skiftnyckel i dina planer.

Ofta vill du ta bort stoppord, skiljetecken, siffror eller annat några kategori av karaktärer, beroende på vad ditt slutmål är.

I denna korta handledning tar vi en titt på hur man tar bort skiljetecken från en sträng i Java.

Ta bort interpunktion från sträng med RegEx (reguljära uttryck)

Reguljära uttryck passar väldigt naturligt här, både för att de sannolikt kommer att ingå i andra bearbetningsdelar och för att de är effektiva mönstermatchare! I Java är det reguljära uttrycket för matchande skiljetecken p{Punct} eller en stenografi p{P}.

Du måste undvika det första snedstrecket i en sträng, så att ta bort alla skiljetecken motsvarar att matcha dem och ersätta dem med ett tomt tecken:

String.replaceAll("p{P}", "")

Låt oss tillämpa det på en enkel mening:

String text = "Hi! This is, in effect, a synthetic sentence. It's meant to have several punctuation characters!";
String clean = text.replaceAll("p{P}", "");
System.out.println(clean);

Detta resulterar i:

Hi This is in effect a synthetic sentence Its meant to have several punctuation characters

Låt oss ta en titt på vilka tecken som behandlas som skiljetecken här:

String text = "!#$%&'()*+,-./:;[email protected][]^_`{|}~";
String clean = text.replaceAll("p{P}", "");
System.out.println(clean);

Med dessa specialtecken – vilka finns kvar efter att skiljetecken tagits bort?

$+^`|~

Ta bort interpunktion från sträng utan RegEx

Om du inte vill använda reguljära uttryck kan du göra en manuell kontroll medan du itererar genom varje tecken i en sträng. Kom ihåg att använda en StringBuffer istället för a String medan du gör detta, eftersom strängar är oföränderliga och kopior måste göras varje gång du vill lägga till en karaktär – så du skulle skapa string.length antal strängar i minnet.

StringBuffer är föränderlig och kan enkelt konverteras till en oföränderlig sträng i slutet av processen:

Kolla in vår praktiska, praktiska guide för att lära dig Git, med bästa praxis, branschaccepterade standarder och medföljande fuskblad. Sluta googla Git-kommandon och faktiskt lära Det!

public static String removePunctuations(String s) {
    StringBuffer buffer = new StringBuffer();
    for (Character c : s.toCharArray()) {
        if(Character.isLetterOrDigit(c))
            buffer.append(c);
    }
    return buffer.toString();
}

Låt oss skapa en sträng och rengöra den:

String text = "Hello! nHere are some special characters: !#$%&'()*+,-./:;[email protected][]^_`{|}~ nWhere are they? :(n";
System.out.println(text);
String clean = removePunctuations(text);
System.out.println(clean);
Hello! 
Here are some special characters: !#$%&'()*+,-./:;[email protected][]^_`{|}~ 
Where are they? :(

HelloHerearesomespecialcharactersWherearethey

Även om den här processen är mer anpassningsbar, letar den bara efter bokstäver och siffror. Du kan söka manuellt för teckenkoder alternativt, och bara utesluta några skiljetecken istället – och lämna i blanksteg, radbrytningar, etc.

Slutsats

I denna korta handledning tog vi en titt på hur du kan ta bort skiljetecken eller vissa specialtecken från en sträng i Java, med hjälp av reguljära uttryck eller en manuell incheckning av en förbättrad for slinga.

Tidsstämpel:

Mer från Stackabuse