65 Stimmen

Konvertierung einer Satzzeichenfolge in ein String-Array von Wörtern in Java

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

"This is a sample sentence."

und verwandeln es in ein String-Array wie:

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

Keine Punkte oder Interpunktion (vorzugsweise). Übrigens, die Eingabe der Zeichenkette ist 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 neue Zeichenfolgen aus den Bereichen zwischen den Leerzeichen (die Wörter sind) erstellen?

85voto

Adam Batkin Punkte 49295

String.split() wird das meiste von dem tun, was Sie wollen. Möglicherweise müssen Sie dann die Wörter in einer Schleife überfliegen, um alle 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]", "");
}

34voto

Ganapathi.D Punkte 606

Dies kann nun mit folgenden Mitteln erreicht werden split da es Regex benötigt:

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"}

En \\W+ passt auf alle nicht-alphabetischen Zeichen, die einmal oder mehrmals vorkommen. Ein Ersetzen ist also nicht erforderlich. Sie können auch andere Muster prüfen.

15voto

Ninh Pham Punkte 5700

Sie können verwenden [BreakIterator.getWordInstance](http://download.oracle.com/javase/6/docs/api/java/text/BreakIterator.html#getWordInstance%28%29) um alle Wörter in einer Zeichenkette 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;
}

Test:

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

Ausfluss:

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

12voto

finnw Punkte 46519

Sie können auch Folgendes verwenden [BreakIterator.getWordInstance](http://download.oracle.com/javase/6/docs/api/java/text/BreakIterator.html#getWordInstance%28%29) .

8voto

Dan Williams Punkte 81

Versuchen Sie, Folgendes zu verwenden:

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

Dadurch wird eine Teilzeichenkette an jedem Index des Arrays von Zeichenketten erstellt, wobei das Leerzeichen als Trennungspunkt verwendet wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X