Подсчет предложений, только предложения, заканчивающиеся знаками препинания + 2 пробела

Я пытаюсь понять, как сделать счетчик предложений, который у меня есть, но дело в том, что мне нужно, чтобы он подсчитывал предложение ТОЛЬКО тогда, когда после точки/вопросительного знака/и т. д. идут два пробела.

Например, с кодом, который у меня есть, если вы введете строку «привет, меня зовут Райан ...», она вернет количество предложений 3. Мне нужно, чтобы он считал только одно предложение.

Эта программа также должна считать слова. Я считаю слова, взяв количество пробелов - 1. Вот в чем заключается моя проблема, я либо путаю количество слов, либо количество предложений.

Вот метод подсчета слов:

public static int countWords(String str){
     if(str == null || str.isEmpty())
        return 0;

     int count = 0;
     for(int i = 0; i < str.length(); i++){
        if(str.charAt(i) != ' '){
           count++;
           while(str.charAt(i) != ' ' && i < str.length()-1){
              i++;
           }
        }
     }
     return count;
  }

А вот и метод подсчета предложений:

public static int sentenceCount(String str) {
     String SENTENCE_ENDERS = ".?!";

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

     }
     return sentenceCount;
  }

person ryan5892    schedule 01.05.2014    source источник
comment
На самом деле я только что получил это с регулярным выражением, на самом деле это было очень просто.   -  person ryan5892    schedule 01.05.2014
comment
отправил, пришлось ждать 8 часов, чтобы ответить на мой собственный вопрос   -  person ryan5892    schedule 01.05.2014


Ответы (1)


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

public static int sentenceCount(String str) {

  String regex = "[?|!|.]+[ ]+[ ]";
  Pattern p = Pattern.compile(regex);
  int count = 0;
  Matcher m = p.matcher(str);       
  while (m.find()) {
     count++;
  }
  if (count == 0){
     return 1;
  }
  else {
     return count + 1;
  }
  }  

Отлично работает, я добавил оператор if, предполагая, что пользователь вводит хотя бы одно предложение, и добавил один к подсчету, предполагая, что они не будут ставить два пробела в конце своего последнего предложения.

person ryan5892    schedule 01.05.2014