2013-10-25 7 views
2

У меня есть программа, которая принимает строку и подсчитывает количество предложений в строке. У меня есть работа, но единственное, что я не могу понять, это то, что предложение заканчивается несколькими разделителями. Вот моя тестовая строка «Быстрая коричневая лиса прыгает через ленивую собаку. Вау !!!!» В этой строке должно быть два предложения. Но он возвращает 4, по сути, подсчитывая три восклицательных знака в конце Wow !!!!. Нам разрешено использовать только то, что вы видите, поэтому я не могу использовать массив.Подсчитайте количество предложений

Это то, что находится в 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

Если вы не можете использовать массивы или списки и SENTENCE_DELIMITERS является строка, я бы Somthing так:

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); 
    } 

} 
Смежные вопросы