Konvertieren einer Satzzeichenfolge in ein Zeichenfolgenarray von Wörtern in Java

Lesezeit: 3 Minuten

Ich brauche mein Java-Programm, um eine Zeichenfolge zu nehmen wie:

"This is a sample sentence."

und verwandle es in ein String-Array wie:

{"this","is","a","sample","sentence"}

Keine Punkte oder Satzzeichen (vorzugsweise). Die String-Eingabe ist übrigens immer ein Satz.

Gibt es eine einfache Möglichkeit, dies zu tun, die ich nicht sehe? Oder müssen wir wirklich viel nach Leerzeichen suchen und aus den Bereichen zwischen den Leerzeichen (die Wörter sind) neue Zeichenfolgen erstellen?

Benutzer-Avatar
Adam Batkin

String.split() wird das meiste tun, was Sie wollen. Möglicherweise müssen Sie dann die Wörter durchlaufen, um Satzzeichen herauszuziehen.

Zum Beispiel:

String s = "This is a sample sentence.";
String[] words = s.split("\\s+");
for (int i = 0; i < words.length; i++) {
    // You may want to check for a non-word character before blindly
    // performing a replacement
    // It may also be necessary to adjust the character class
    words[i] = words[i].replaceAll("[^\\w]", "");
}

  • Könnten Sie eine Erklärung zu den von Ihnen verwendeten regulären Ausdrücken hinzufügen?

    – Marek

    19. Juni 2013 um 0:15 Uhr

  • @Marek 1. \\s bedeutet Leerzeichen, \\s+ bedeutet mehrere Leerzeichen 2. .replaceAll(“[^\\w]”, “”); und .replaceAll(“\\W”, “”); Beide ersetzen die Zeichen außer [a-zA-Z0-9_]. Wenn Sie auch den Unterstrich ersetzen möchten, verwenden Sie: [\\W_]

    – Wyschnav Ramesh Thrissur

    4. April 2018 um 10:11 Uhr

  • Es funktioniert gut, obwohl ich Upvote habe, aber dieser reguläre Ausdruck entfernt alle, wenn Sonderzeichen vorhanden sind !!! Bitte aktualisieren Sie, wenn es einen normalen regulären Ausdruck gibt, der kein Zeichen entfernt

    – Tarit Ray

    26. Juni 2018 um 10:43 Uhr


Benutzer-Avatar
Ganapathi.D

Jetzt kann dies nur mit erreicht werden split wie es Regex braucht:

String s = "This is a sample sentence with []s.";
String[] words = s.split("\\W+");

dies ergibt Wörter wie: {"this","is","a","sample","sentence", "s"}

Das \\W+ stimmt mit allen nicht alphabetischen Zeichen überein, die einmal oder mehrmals vorkommen. Es muss also nicht getauscht werden. Sie können auch andere Muster überprüfen.

  • Vielleicht möchten Sie die Regex mit beginnen (?U) um die Unicode-Zeichenklasse zu aktivieren, sonst funktioniert es nur mit dem englischen Alphabet.

    – holmis83

    5. Dezember 2018 um 12:05 Uhr

Sie können verwenden BreakIterator.getWordInstance um alle Wörter in einer Zeichenfolge zu finden.

public static List<String> getWords(String text) {
    List<String> words = new ArrayList<String>();
    BreakIterator breakIterator = BreakIterator.getWordInstance();
    breakIterator.setText(text);
    int lastIndex = breakIterator.first();
    while (BreakIterator.DONE != lastIndex) {
        int firstIndex = lastIndex;
        lastIndex = breakIterator.next();
        if (lastIndex != BreakIterator.DONE && Character.isLetterOrDigit(text.charAt(firstIndex))) {
            words.add(text.substring(firstIndex, lastIndex));
        }
    }

    return words;
}

Prüfen:

public static void main(String[] args) {
    System.out.println(getWords("A PT CR M0RT BOUSG SABN NTE TR/GB/(G) = RAND(MIN(XXX, YY + ABC))"));
}

Ausgang:

[A, PT, CR, M0RT, BOUSG, SABN, NTE, TR, GB, G, RAND, MIN, XXX, YY, ABC]

  • es splittet xy nicht, dh “funny.Does it split”, gibt funny.Does als 1 Wort zurück

    – kostas.kougios

    25. September 2015 um 17:05 Uhr

  • Und das sollte es wahrscheinlich nicht. Im Englischen – der Code gibt leider kein Gebietsschema an – werden Wörter nicht durch Punkte getrennt.

    – james.garriss

    28. Oktober 2015 um 15:41 Uhr

Sie können auch verwenden BreakIterator.getWordInstance.

Benutzer-Avatar
Dan Williams

Versuchen Sie Folgendes:

String str = "This is a simple sentence";
String[] strgs = str.split(" ");

Dadurch wird an jedem Index des String-Arrays eine Teilzeichenfolge erstellt, wobei das Leerzeichen als Trennpunkt verwendet wird.

Benutzer-Avatar
eebben

Sie können Ihre Zeichenfolge einfach so aufteilen regulär Ausdruck

String l = "sofia, malgré tout aimait : la laitue et le choux !" <br/>
l.split("[[ ]*|[,]*|[\\.]*|[:]*|[/]*|[!]*|[?]*|[+]*]+");

Benutzer-Avatar
James

Die einfachste und beste Antwort, die mir einfällt, ist die Verwendung der folgenden Methode, die in der Java-Zeichenfolge definiert ist –

String[] split(String regex)

Und machen Sie einfach “Dies ist ein Beispielsatz”.split(” “). Da eine Regex erforderlich ist, können Sie auch kompliziertere Aufteilungen vornehmen, die das Entfernen unerwünschter Satzzeichen und anderer solcher Zeichen umfassen können.

  • Leute, das ist die einfachste Lösung, wenn ein Satz keine Interpunktion hat.

    – Sandalen

    21. August 2013 um 15:07 Uhr

1092360cookie-checkKonvertieren einer Satzzeichenfolge in ein Zeichenfolgenarray von Wörtern in Java

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy