Teile den Satz in Wörter und Interpunktionen

Ich muss den Unterricht analysierenSentence in Wort und Interpunktion (Whitespace wird als Interpunktionszeichen betrachtet), und fügen Sie dann alles in das Allgemeine einArrayList<Sentence>.

Ein Beispielsatz:

Ein Mann, ein Plan, ein Kanal - Panama!
A => Wort
Whitespase => Interpunktion
Mann => Wort
, + Leerzeichen => Interpunktion
a => wort
[...]

Ich habe versucht, den ganzen Satz einzeln zu lesen und das Gleiche zu sammeln und ein neues Wort oder ein neues zu erstellenPunctuation aus dieser sammlung.

Hier ist mein Code:

public class Sentence {

    private String sentence;
    private LinkedList<SentenceElement> elements;

    /**
     * Constructs a sentence.
     * @param aText a string containing all characters of the sentence
     */
    public Sentence(String aText) {
        sentence = aText.trim();
        splitSentence();
    }

    public String getSentence() {
        return sentence;
    }

    public LinkedList<SentenceElement> getElements() {
        return elements;
    }

    /**
     * Split sentance into words and punctuations
     */
    private void splitSentence() {
        if (sentence == "" || sentence == null || sentence == "\n") {
            return;
        }

        StringBuilder builder = new StringBuilder();

        int j = 0;
        boolean mark = false;
        while (j < sentence.length()) {
            //char current = sentence.charAt(j);

            while (Character.isLetter(sentence.charAt(j))) {
                if (mark) {
                    elements.add(new Punctuation(builder.toString()));
                    builder.setLength(0);
                    mark = false;
                }
                builder.append(sentence.charAt(j));
                j++;
            } 
            mark = true;

            while (!Character.isLetter(sentence.charAt(j))) {
                if (mark) {
                    elements.add(new Word(builder.toString()));
                    builder.setLength(0);
                    mark = false;
                }
                builder.append(sentence.charAt(j));
                j++;
            }
            mark = true;
        }
    }

Aber die Logik von splitSentence () funktioniert nicht richtig. Und ich kann keine richtige Lösung dafür finden.

Ich möchte dies implementieren, wenn wir das erste Zeichen lesen => zum Builder hinzufügen => bis das nächste Element vom selben Typ ist (Buchstabe oder Interpunktion). Füge es weiterhin zum Builder hinzu => wenn das nächste Element nicht zum Inhalt des Builders gehört => erstelle ein neues Wort oder Zeichensetzung und Start des Builders.

Wiederholen Sie die Logik.

Wie kann diese Prüflogik richtig implementiert werden?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage