2013-10-25 100 views
2

我有一個程序需要一個字符串並計算字符串中的句子數。我有它的工作,但我無法弄清楚的一件事是如果句子以多個分隔符結束。這是我的測試字符串「快速的棕色狐狸跳過懶惰的狗,哇! 它應該在這個字符串中有兩個句子。但它回來了,它基本上是在哇哇結尾的三個感嘆號!我們只能使用你看到的所以我不能使用數組。計算句子數

這是什麼在SENTENCE_DELIMETERS =「。,::?!」變量。

任何幫助表示讚賞。

int sentenceCount=0; 
for(int i=0;i<myFile.length()-1;i++){ 
    for(int j=0;j<SENTENCE_DELIMETERS.length();j++){ 
     if(myFile.charAt(i)==SENTENCE_DELIMETERS.charAt(j)) 
      sentenceCount++; 
      } 
    } 
+1

這聽起來像是正則表達式的工作。 –

+0

如果你找到一個句子分隔符,插入一個'while'循環跳過其餘部分並增加變量'i'。在while循環結束時,您將返回到for循環來檢查其餘部分。 (在while循環中,也要小心線結束。) – usr2564301

+0

檢查外循環的條件。我認爲你不需要那個-1。 –

回答

1

如果您不允許使用數組或列表和SENTENCE_DELIMITERS是一個字符串,我會做財產以後這樣的:

int sentenceCount=0; 
int lastIndex=0; 
for(int i=0;i<myFile.length();i++){ 
    for(int j=0;j<SENTENCE_DELIMETERS.length();j++){ 
     if(myFile.charAt(i)==SENTENCE_DELIMETERS.charAt(j)){ 
      if(lastIndex!=i-1){ 
       sentenceCount++; 
      } 
      lastIndex=i; 
     } 
    } 
} 
2

我會做這樣

String SENTENCE_DELIMETERS = "!."; 
    int sentenceCount = 0; 
    for (int i = 0; i < myFile.length() - 1; i++) { 
     if (SENTENCE_DELIMETERS.indexOf(myFile.charAt(i)) != -1 && i > 0 && SENTENCE_DELIMETERS.indexOf(myFile.charAt(i - 1)) != -1) { 
       sentenceCount++; 
     } 
    } 
3

你只需要一條線:

int count = str.split("[!?.:]+").length; 

加號會將多個分隔符視爲一個分隔符,從而解決您的特定問題。

注意:逗號,不是句子分隔符。

如果你絕對必須使用(不正確)變量,建立從它的正則表達式:

split("[" + SENTENCE_DELIMETERS + "]+") 
+0

感謝您指出逗號,這是無意中添加的,現在它已經消失。感謝這裏的每個人,我確實得到了它的工作。 – RamseyR

1

這是我會怎麼做:

// By Nishanth Chandradas 
public class SentenceCounter { 

    public static void main(String[] args) { 
     int sentenceCount=1; 
     String myFile = "The quick brown fox jumps over the lazy dog. Wow!!!!"; 
     String SENTENCE_DELIMETERS = ".,::?!"; 
     for(int i=0;i<myFile .length()-1;i++){ 
      for(int j=0;j<SENTENCE_DELIMETERS.length();j++){ 
       if(myFile.charAt(i)==SENTENCE_DELIMETERS.charAt(j)){ 
        if(myFile.charAt(i+1)==SENTENCE_DELIMETERS.charAt(j)){ 
         sentenceCount--;} 
        sentenceCount++; } } } 
    System.out.println(sentenceCount); 
    } 

}