Java word count program

后端 未结 22 978
北荒
北荒 2020-12-09 06:48

I am trying to make a program on word count which I have partially made and it is giving the correct result but the moment I enter space or more than one space in the string

22条回答
  •  时光说笑
    2020-12-09 07:06

    Two routes for this. One way would be to use regular expressions. You can find out more about regular expressions here. A good regular expression for this would be something like "\w+" Then count the number of matches.

    If you don't want to go that route, you could have a boolean flag that remembers if the last character you've seen is a space. If it is, don't count it. So the center of the loop looks like this:

    boolean prevCharWasSpace=true;
    for (int i = 0; i < str1.length(); i++) 
    {
        if (str1.charAt(i) == ' ') {
            prevCharWasSpace=true;
        }
    else{
            if(prevCharWasSpace) wordChar++;
            prevCharWasSpace = false;
    
        }
    }
    

    Update
    Using the split technique is exactly equivalent to what's happening here, but it doesn't really explain why it works. If we go back to our CS theory, we want to construct a Finite State Automa (FSA) that counts words. That FSA may appear as:
    enter image description here
    If you look at the code, it implements this FSA exactly. The prevCharWasSpace keeps track of which state we're in, and the str1.charAt('i') is decideds which edge (or arrow) is being followed. If you use the split method, a regular expression equivalent of this FSA is constructed internally, and is used to split the string into an array.

提交回复
热议问题