dividir sentença em palavras e pontuações
Eu preciso analisar a aulaSentence
em palavra e pontuação (o espaço em branco é considerado um sinal de pontuação) e adicione tudo isso em geralArrayList<Sentence>
.
Uma frase de exemplo:
Um homem, um plano, um canal - Panamá!
A => palavra
whitespase => pontuação
homem => palavra
, + espaço => pontuação
a => palavra
[...]
Tentei ler toda a frase, um caractere de cada vez, coletar o mesmo e criar uma nova palavra ou novoPunctuation
desta coleção.
Aqui está o meu código:
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;
}
}
Mas a lógica de splitSentence () não funciona corretamente. E não consigo encontrar a solução certa para isso.
Eu quero implementar isso enquanto lemos o primeiro caractere => adicionar ao construtor => até o próximo elemento ser do mesmo tipo (letra ou pontuação) continuar adicionando ao construtor => quando o próximo elemento for diferente do conteúdo do construtor => criar nova palavra ou pontuação e configure o construtor para iniciar.
Faça a mesma lógica novamente.
Como implementar essa lógica de verificação no caminho certo?