Usuń interpunkcję z ciągu znaków w Javie

Podczas przetwarzania tekstu, niezależnie od tego, czy szukasz określonych słów i ustalasz reguły dopasowania wzorców, liczenie częstotliwości elementów itp. – interpunkcja może zepsuć Twoje plany.

Często będziesz chciał usunąć przerywniki, znaki interpunkcyjne, cyfry lub w inny sposób kilka kategoria postaci, w zależności od tego, jaki jest twój cel końcowy.

W tym krótkim samouczku przyjrzymy się, jak usunąć interpunkcję z ciągu znaków w Javie.

Usuń interpunkcję z ciągu za pomocą RegEx (wyrażenia regularne)

Wyrażenia regularne są tutaj bardzo naturalne, zarówno dlatego, że prawdopodobnie będą częścią innych części przetwarzania, jak i dlatego, że są wydajnymi dopasowywaniem wzorców! W Javie wyrażeniem regularnym do dopasowywania interpunkcji jest p{Punct} lub skrót p{P}.

Będziesz musiał pominąć pierwszy ukośnik odwrotny w łańcuchu, więc usunięcie wszystkich znaków interpunkcyjnych jest równoznaczne z dopasowaniem ich i zastąpieniem pustym znakiem:

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

Zastosujmy to do prostego zdania:

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);

To skutkuje:

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

Rzućmy okiem na to, jakie znaki są tutaj traktowane jako interpunkcja:

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

Z tymi znakami specjalnymi – które pozostały po usunięciu interpunkcji?

$+^`|~

Usuń interpunkcję z ciągu bez RegEx

Jeśli nie chcesz używać wyrażeń regularnych, możesz wykonać ręczne sprawdzenie podczas iteracji każdego znaku ciągu. Pamiętaj, aby użyć StringBuffer zamiast a String robiąc to, ponieważ ciągi są niezmienne i kopie muszą być tworzone za każdym razem, gdy chcesz dodać znak - więc tworzysz string.length liczba ciągów w pamięci.

StringBuffer jest zmienny i można go łatwo przekształcić w niezmienny ciąg na końcu procesu:

Zapoznaj się z naszym praktycznym, praktycznym przewodnikiem dotyczącym nauki Git, zawierającym najlepsze praktyki, standardy przyjęte w branży i dołączoną ściągawkę. Zatrzymaj polecenia Google Git, a właściwie uczyć się to!

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();
}

Stwórzmy ciąg i wyczyśćmy go:

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

Chociaż ten proces jest bardziej konfigurowalny, sprawdza tylko litery i cyfry. Alternatywnie możesz sprawdzić ręcznie kody znaków i zamiast tego wykluczyć tylko niektóre znaki interpunkcyjne – i pozostawić spacje, podziały wierszy itp.

Wnioski

W tym krótkim samouczku przyjrzeliśmy się, jak usunąć interpunkcję lub niektóre znaki specjalne z ciągu znaków w Javie za pomocą wyrażeń regularnych lub ręcznego sprawdzania w rozszerzonym for pętla.

Znak czasu:

Więcej z Nadużycie stosu