Tomando la respuesta elegida como punto de partida los siguientes acuerdos con algunos problemas de idioma Inglés, incluyendo palabras con guiones, apóstrofes para los posesivos y mantecas, números y también los caracteres fuera de UTF-16:
public static int countWords(final String s) {
int wordCount = 0;
boolean word = false;
final int endOfLine = s.length() - 1;
for (int i = 0; i < s.length(); i++) {
// if the char is a letter, word = true.
if (isWordCharacter(s, i) && i != endOfLine) {
word = true;
// if char isn't a letter and there have been letters before,
// counter goes up.
} else if (!isWordCharacter(s, i) && word) {
wordCount++;
word = false;
// last word of String; if it doesn't end with a non letter, it
// wouldn't count without this.
} else if (isWordCharacter(s, i) && i == endOfLine) {
wordCount++;
}
}
return wordCount;
}
private static boolean isWordCharacter(final String s, final int i) {
final char ch = s.charAt(i);
return Character.isLetterOrDigit(ch)
|| ch == '\''
|| Character.getType(ch) == Character.DASH_PUNCTUATION
|| Character.isSurrogate(ch);
}
¿Es esta tarea? – Trufa
¡No, solo un poco de práctica de cuerdas extra! ¡Gracias amigo! –
@ user667926: bueno, ¡buena suerte! – Trufa