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.