Free Web Site - Free Web Space and Site Hosting - Web Hosting - Internet Store and Ecommerce Solution Provider - High Speed Internet
Search the Web

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