разделите предложение на слова и знаки препинания

Мне нужно разобрать классSentence в слово и пунктуацию (пробел рассматривается как знак пунктуации), затем добавьте все это в общем.ArrayList

Пример предложения:

Человек, план, канал - Панама!

A => слово

whitespase => пунктуация

человек => слово

, + пробел => пунктуация

а => слово

[...]

Я пытался прочитать все это предложение по одному символу за раз и собрать то же самое и создать новое слово или новоеPunctuation из этой коллекции.

Вот'мой код:

public class Sentence {

    private String sentence;
    private LinkedList 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 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;
        }
    }

Но логика splitSentence () нене работает правильно. И я могу'т, чтобы найти правильное решение для этого.

Я хочу реализовать это, когда мы читаем первый символ => добавить к строителю => пока следующий элемент не будет того же типа (буква или пунктуация), продолжайте добавлять в строитель => когда следующий элемент отличается от содержимого builder => создайте новое слово или пунктуацию и установите строитель для запуска.

Сделайте ту же логику снова.

Как правильно реализовать эту логику проверки?

Ответы на вопрос(1)

Ваш ответ на вопрос