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?