podzielić zdanie na słowa i interpunkcje
Muszę przeanalizować klasęSentence
na słowo i interpunkcję (białe znaki są traktowane jako znak interpunkcyjny), a następnie dodaj je wszystkie do ogólnegoArrayList<Sentence>
.
Przykładowe zdanie:
Człowiek, plan, kanał - Panama!
A => słowo
biały znak => interpunkcja
man => słowo
, + spacja => interpunkcja
a => słowo
[...]
Próbowałem czytać całe zdanie po jednym znaku na raz i zbierać to samo i tworzyć nowe słowo lub nowePunctuation
z tej kolekcji.
Oto mój kod:
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;
}
}
Ale logika splitSentence () nie działa poprawnie. I nie mogę znaleźć odpowiedniego rozwiązania.
Chcę to zaimplementować, czytając pierwszy znak => dodaj do buildera =>, aż następny element będzie tego samego typu (litera lub interpunkcja) dodawaj do builder => gdy następny element jest inny niż zawartość buildera => utwórz nowe słowo lub interpunkcja i ustawianie budowniczego na start.
Zrób ponownie tę samą logikę.
Jak wdrożyć tę logikę sprawdzającą we właściwy sposób?