Java RegEx Matcher.groupCount returns 0

How could I then find the number of "mas" (or any other) words in a string without looping?

You could use StringUtils in Apache Commons:

int countMatches = StringUtils.countMatches("quiero mas dinero...", "mas");

From the javadoc of Matcher.groupCount():

Returns the number of capturing groups in this matcher's pattern.
Group zero denotes the entire pattern by convention. It is not included in this count.

If you check the return value from m.find() it returns true, and m.group() returns mas, so the matcher does find a match.

If what you are trying to do is to count the number of occurances of s in mybooks.get(i).getBody(), you can do it like this:

String s="mas"; // this is for testing, comes from a List<String>
int hit=0;
Pattern p=Pattern.compile(s,Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(mybooks.get(i).getBody());
while (m.find()) {
    hit++;
}