hola amigo, a mi tambien me funciono el código, solo que al momento de apretar control+z, no terminaba la ejecución y cambie tu atributo eof final char eof = (char) '1';
entonces al momento de apretar "1" termina la ejecución y muestra los resultados
import java.io.*;
public class CContarPalabras
{
public static void main(String[] args) //Contar caracteres, palabras y lineas en un texto
{
final char eof = (char) '1';
char car;
boolean palabra = false;
int ncaracteres = 0, npalabras = 0, nlineas = 0;
try
{
System.out.println("Introducir texto. " + "Pulse [Enter] despues de cada linea.");
System.out.println("Para finalizar pulsar Ctrl+z.\n");
while ((car = (char)System.in.read()) != eof)
{
//[Enter] = CRLF = \r\n
if (car == '\r') continue; //Le sigue un \n
ncaracteres++; //Contador de caracteres
//Eliminar blancos, tabuladores y finales de linea entre palabras
if (car == ' ' || car == '\n' || car == '\t')
palabra = false;
else if (!palabra)//comienza una palabra
{
npalabras++; //contador de palabras
palabra = true;
}
if (car == '\n')//Finaliza una linea
nlineas++;
}
System.out.println();
System.out.println(ncaracteres + " " + npalabras + " " + nlineas);
}
catch(IOException ignorada){}
}
}