I need to count the number of words and I am assuming the correct way to do it is by calculating the number of times that the previous character in a string is not a letter
Use just like this
String s = "I am Juyel Rana, from Bangladesh";
int count = s.split(" ").length;
You can use String.split() to convert the string into an array, with one word in each element. The number of words is given by the length of the array:
int words = myString.split("\s+").length;
This problem is slightly more complicated than your algorithm allows.
This looks like homework, so I don't want to provide any code. I suggest an alternative approach which is simpler to think about.
The following program will count the number of words in a sentence. In this program, we are counting alphabets just after space. The alphabet can be of lower case or upper case. We are inserting a space at the beginning since people don't start a sentence with space. We also need to take care that any special character or number should not be counted as a word.
`import java.util.Scanner; public class WordSent {
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
System.out.println("Enter the sentence");
String str=in.nextLine();
String space=" ";
String spaceword=space.concat(str);
int count=0;
for(int i=0; i<spaceword.length()-1;i++)
{
for (int k=0; k<=25; k++)
{
if(spaceword.charAt(i)==' '&& (spaceword.charAt(i+1)==((char)(65+k)) || spaceword.charAt(i+1)==((char)(97+k))))
{
count++;
}
}
}
System.out.println("Total number of words in a sentence are" +" : "+ count);
}
}`
Addressing the code directly, your first loop has i=0 as the first value of i, but then you ask for
string.charAt(i-1) = string.charAt(-1),
which is where your array-out-of-bounds is coming from.
The second loop has another problem:
for(int j = 0; i < alphabets.length(); j++) {
You may also want to consider apostrophes as parts of words as well.
The reason you are getting an IndexOutOfBoundsException
is probably because when i is 0 your inner loop will have string.charAt(i-1)
which will throw an exception since 0-1 is -1. If you fix that your method might work, although you can use more efficient techniques.