我需要將類Sentence
解析爲單詞和標點符號(空格被認爲是標點符號),然後將其全部添加到常規的ArrayList<Sentence>
中。將句子分成單詞和標點符號
例句:
一個人,一個計劃,運河 - 巴拿馬!
A =>字
whitespase =>標點符號
人=>字
,+空間=>標點符號
一個=>字
[...]
我試圖讀取此整個句子一次一個字符並收集相同的內容,並從此集合中創建新詞或新的Punctuation
。
這裏是我的代碼:
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;
}
}
但splitSentence的邏輯()時無法正常工作。我無法爲它找到正確的解決方案。
我要實現這個,我們讀第一個字符=>添加到構建器=>直到下一個元素都是同一類型(字母或標點符號)不斷加入到建設者=>當一個元素比建設者的內容不同=>創建新的單詞或標點符號和集合構建啓動。
做同樣的邏輯。
如何實現在正確的方式該檢查邏輯?
'如果(句子== 「」 ||句子== null ||一句話== 「\ n」){'比較字符串與'equals.' –
'一句== 「」'。不要使用'=='比較字符串值。使用'equals()'。 –
你考慮的BreakIterator? http://docs.oracle.com/javase/7/docs/api/java/text/BreakIterator.html – caprica