计算eclipse中字符串中的单词数

时间:2015-09-26 15:20:55

标签: java eclipse string loops

public static int countWords(String str)
     

此方法将计算str中的单词数   例如,如果str = "Hi there",则该方法将返回2.

我是初学者,不应该使用预建程序。我知道它可能使用循环,我需要使用.indexOf来查找空格?像我在底部尝试失败的事情

public static int countWords(String str){
    int count=0;
    int len=str.length();
    if(str.indexOf(" ")>=0){
     for(int i=0; i<len; i++)
        count=count+i;
    }
    return count;

3 个答案:

答案 0 :(得分:0)

你可以写

public static int countWords(String str){
   if(str == null){
    return 0;  // or your wish to return something
   }
   str = str.trim();
   return str.split("\\s+").length;
}

即使有空格,\\s+也会分割字符串。

答案 1 :(得分:0)

目前的实施完全错误:

  • 如果字符串不包含空格,则不会进入if块,并且错误地返回0,因为这是count的初始值并且从未更改
  • 如果字符串包含空格,则循环不是您想要的:它将0到len之间的数字相加,例如len = 5,结果将为0 + 1 + 2 + 3 + 4
  • 代码中没有任何内容可以解释单词。请注意,计算空间是不够的,例如考虑输入:“Hello there :-)”。注意单词之间,以及开头和结尾以及非单词笑脸之间的空格过多。

这应该相对健壮:

int countWords(String text) {
    String[] parts = text.trim().split("\\W+");
    if (parts.length == 1 && parts[0].isEmpty()) {
        return 0;
    }
    return parts.length;
}

繁琐的if条件可以处理一些特殊情况:

  • 空字符串
  • 仅包含非单词字符的字符串

单元测试:

@Test
public void simple() {
    assertEquals(4, countWords("this is a test"));
}

@Test
public void empty() {
    assertEquals(0, countWords(""));
}

@Test
public void only_non_words() {
    assertEquals(0, countWords("@#$#%"));
}

@Test
public void with_extra_spaces() {
    assertEquals(4, countWords("  this is   a   test  "));
}

@Test
public void with_non_words() {
    assertEquals(4, countWords("  this is   a   test  :-) "));
}

答案 2 :(得分:0)

c:\php\www\myapp