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){}
 }   
}