3

我有一个程序,它接收一个字符串并计算字符串中的句子数。我让它工作但我不知道的一件事是句子是否以多个分隔符结尾。这是我的测试字符串“快速棕色狐狸跳过懒狗。哇!!!!” 它应该在这个字符串中有两个句子。但它返回 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++;
          }
    }
4

4 回答 4

4

你只需要一行:

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

加号会使多个分隔符被视为一个分隔符,从而解决您的特定问题。

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

如果您绝对必须使用您的(不正确的)变量,请从中构建正则表达式:

split("[" + SENTENCE_DELIMETERS + "]+")
于 2013-10-25T23:51:16.293 回答
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++;
        }
    }
于 2013-10-25T23:41:17.177 回答
2

如果您不允许使用数组或列表并且 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;
        }
    }
}
于 2013-10-25T23:34:32.627 回答
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);
    }

}
于 2013-10-26T00:39:49.397 回答