Ejercicio resuelto de Ayudantía 1 de Computación III
Descripción del problema
El problema consiste en transformar
una entrada de texto con signos de puntuación,
en una sin signos de puntuación, además de indicar la
cantidad de caracteres de puntuacion
que hay la inicio, en medio y al final
de la entrada de texto o frase.
Salida a pantalla
Solución
import java.io.*;
public class StringManager
{
/* cadena de caracteres a procesar */
private String str;
/* arreglo booleano que tendra un valor false si el caracter i-esimo
es letra, y un valor true si es caracter de puntuacion
*/
private boolean mapaPuntuacion[];
/* arreglo de caracteres de puntuacion */
private char[] puntuacion = {'-','<' , '(' , ' ' , '\"' , '.' ,
'\'' , ',' , ';' , ':' , '>' , ')' , '?' , '!' };
/* constructor de la clase, instancia un nuevo string y ademas
hace la llamada del metodo que mapea en terminos de 0's y 1's
los caracteres */
public StringManager(String str_in)
{
str = new String(str_in);
if (str.length() > 0)
{
mapaPuntuacion = new boolean[str.length()];
asignaMapaDePuntuacion();
}
}
/* de acuerdo si los caracteres son o no de puntuacion, crea un arreglo
booleano */
private int asignaMapaDePuntuacion()
{
int len_puntuacion = puntuacion.length;
int cont = 0;
for(int k = 0; k < str.length(); k++)
{
mapaPuntuacion[k] = false;
for(int i = 0; i < len_puntuacion; i++)
{
if (str.charAt(k) == puntuacion[i] )
{
mapaPuntuacion[k] = true;
cont++;
i = len_puntuacion;
}
}
}
return cont;
}
/* de acuerdo al mapa de caracteres va extrayendo las subcadenas que tienen
sus valores en false. Una vez finalizado retorna el string de resultado.
*/
public String extraerPalabras()
{
String tmp = "";
int pos = 0;
int len;
boolean esPuntuacion = false;
for(int i = 0; i < mapaPuntuacion.length; i++)
{
if (mapaPuntuacion[i] == true)
continue;
else
{
len = 0;
pos = i;
while (!mapaPuntuacion[i]) { i++; len++; }
tmp += str.substring(pos,pos + len) + " ";
}
}
return tmp;
}
public int puntuacionInicial()
{
int cont = 0;
while(mapaPuntuacion[cont] == true) { cont++; }
return cont;
}
public int puntuacionFinal()
{
int i = str.length() - 1;
int cont = 0;
while(mapaPuntuacion[i] == true)
{
cont++;
i--;
}
return cont;
}
public int puntuacionMedia(int numCar_ini, int numCar_fin)
{
int cont = 0;
int p = numCar_ini;
int u = mapaPuntuacion.length - 1 - numCar_fin;
while(p <= u)
{
if (mapaPuntuacion[p++]) cont++;
}
return cont;
}
public void verMapa()
{
String aux = "\t";
for(int i = 0; i < mapaPuntuacion.length; i++)
{
if (mapaPuntuacion[i] == true)
aux += "1";
else
aux += "0";
}
System.out.println(aux);
}
public static void main(String args[]) throws IOException
{
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
String entrada;
int seguir = 1;
System.out.println("\n");
while(seguir == 1)
{
System.out.print("Ingrese frase : ");
entrada = in.readLine();
StringManager strm = new StringManager(entrada);
System.out.println("\n\tMapa : ");
strm.verMapa();
System.out.println("la entrada sin puntuacion es : \n");
System.out.println(strm.extraerPalabras());
int pi,pf,pm;
pi = strm.puntuacionInicial();
pf = strm.puntuacionFinal();
pm = strm.puntuacionMedia(pi,pf);
System.out.println("Puntuacion inicial : " + pi);
System.out.println("Puntuacion media : " + pm);
System.out.println("Puntuacion final : " + pf);
System.out.print("\nsalir(0) , seguir(1) : ");
seguir = Integer.parseInt(in.readLine());
}
}
}Bajar archivo