Aparentemente não reconhece o CTR + Z, resolvi, indicando o programa em um que terminará a captura de dados quando o usuário digitar o caractere #, o aninhado se tiver uma quebra que terminar a entrada do fluxo de dados:
classe pública Callapalabras {
public static void main(String args) { //Declaración de variables final char eof = (char)-1; //Final asigna un valor constante a la variable eof char car; boolean palabra = false; int ncaracteres = 0, npalabras = 0, nlineas = 0; try{ //Encabezado de la aplicación System.out.println("Introducir texto. "+ "Pulse Enter después de cada linea." + "Para finalizar la captura teclea el caracter #" ); /*Inicio del bucle principal que lee la cadena de carateres sin importar si se dió una vuelta de carro creando un bucle infinito que solo se interrumpe con ctr + z*/ while( ( car =(char)System.in.read() ) != eof){ if (car == '#') break; /*Bucle 1 que detecta vuelta de carro. Contará caracteres hasta detectar una vuelta de carro, donde la variable ncarateres se autoincrementará de uno en uno dando el número de caracteres del texto dado, eof identifica el final del flujo de entrada*/ if(car == '\r') continue; ncaracteres++; /*Bucle 2 que detecta los espacios en blanco, inicio de lineas nuevas y tabuladores, los cuales discrimina al asignarles un valor boolean false*/ if (car == ' ' || car == '\n' || car == '\t') palabra = false; /*Bucle 3, el operador ! es negación, asigna un incremento a la variable npalabras cuando la variable boolean palabra es true*/ else if(!palabra){ npalabras++; palabra = true; }//Cierre else if /*Bucle 4, identifica el comienzo de una nueva linea, donde el valor de nlineas se autoincrementa*/ if(car == '\n') nlineas++; }//Cierre del bucle principal while //Presentación de resultados System.out.println(); System.out.println("Caracteres = " + ncaracteres + " Palabras= " + npalabras + " Lineas= " + nlineas ); }//Cierre try catch(IOException ignorada){}}//Cierre programa
} // classe de fechamento