不计算最后一个字的句子中的字母数

时间:2015-07-19 13:09:57

标签: java string word-count

我是java编程的新手。此片段计算每个单词中没有字母并将其存储为字符串(不包括空格),但它只计算直到"大"并且不计算"容器"中的字母数。

class piSong
{
    String pi = "31415926535897932384626433833";
    public void isPiSong(String exp)
    {
        int i,count=0;
        String counter = "";
        String str;
        System.out.println(exp.charAt(25));
        for(i=0;i<exp.length()-1;i++)
        {
            if(Character.isWhitespace(exp.charAt(i)))
            {   str = Integer.toString(count);
                counter += str;
                count = 0;
                continue;
            }
            count++;

        }
        System.out.println(counter);
    }
}
public class isPiSong{
    public static void main(String[] args)
    {
        piSong p = new piSong();
        String exp = "can i have a large container";
        p.isPiSong(exp);
    }
} 

预期产量:314157

当前输出:31415

2 个答案:

答案 0 :(得分:3)

你应该解决两件事。

  1. 在for循环中,您的条件为i<exp.length()-1。为什么?您显然也希望包含最后一个字符(charAt(exp.length() -1)),因此您的条件应为i <= exp.length() -1i < exp.length()

  2. 您的逻辑是在遇到空格时计算字母数。但在计算完最后一个字后,你没有空格。这就是为什么它不计算最后一个字。

  3. 要修复,请在循环后将count附加到counter

    // Loop ends here
    counter += count;
    System.out.println(counter);
    

答案 1 :(得分:0)

String counter = "";
String[] array = exp.split(" ");
for(String s: array){
  counter += Integer.toString(s.length);
}

第二行将String拆分为一个字符串数组(使用String中每个空格实例拆分)。循环遍历数组中的每个单独的String,并将其长度添加到计数器String。 最好使用StringBuilder而不是+=附加到字符串。

StringBuilder sb = new StringBuilder();
    String[] array = exp.split(" ");
    for(String s: array){
      sb.append(Integer.toString(s.length));
    }
String counter = sb.toString();

但两者都会这样做。