lunes, 11 de noviembre de 2013

MANEJO DE CADENAS EN JAVA



EJERCICIOS RESUELTOS



1.  Leer una frase y encontrar la palabra de mayor longitud. El programa debe imprimir la palabra como el número de caracteres de la misma

SOLUCIÓN:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Ejerc12 {
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        int i, c=0;
        String cadena, palabra="", mostrar = null;

        System.out.println("Ingrese la cadena: ");
        cadena=br.readLine();
        cadena+=" ";

        for(i=0;i<cadena.length();i++){
            palabra=palabra+cadena.charAt(i);
            if(cadena.charAt(i)==' '){
                if(palabra.length()-1>c){
                    c=palabra.length()-1;
                    mostrar=palabra.trim();
                }
                palabra="";
            } 
        }
        System.out.println("La palabra de mayor longitud es: "+mostrar);
        System.out.println("Su longitud es: "+c);
    }
}


2.  Ingresar una cadena y determinar cuantas palabras se encuentran en la cadena.  Cada palabra se separa por medio de un espacio en blanco.

SOLUCIÓN:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Ejerc11 {
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        int i, con=1;
        String cadena, palabra="";

        System.out.println("Ingrese la cadena a evaluar: ");
        cadena=br.readLine();
        for(i=0;i<cadena.length();i++){
            if(cadena.charAt(i)==' '){
                con++;
            }
        }
        System.out.println("La cadena contiene "+con+" palabras");       
    }

}


3.   Ingresar un número telefónico en formato de cadena y luego lo convierta de la siguiente manera:
            Número Telefónico: 5256284000
            Nueva Cadena: (52)-5-6284000

SOLUCIÓN:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Ejerc15 {
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        int i;
        String cadena,c1="", c2="", c3="";
        System.out.println("Ingrese la cadena a evaluar: ");
        cadena=br.readLine();

        for(i=0;i<cadena.length();i++){
            if(i<2){
                c1=c1+cadena.charAt(i);
            }
            else{
                if(i==2){
                    c2+=cadena.charAt(i);
                }
                else{
                    c3+=cadena.charAt(i);
                }
            }
        }
        System.out.println("la nueva cadena es: \n"+"("+c1+")"+"-"+c2+"-"+c3);
    }
}


4.   Hacer un programa que al recibir como datos dos cadenas de caracteres forme una tercera cadena intercalando los caracteres de las palabras de las cadenas recibidas.

SOLUCIÓN:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Ejerc16 {
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        int i, j, k=0;
        String cadena1, cadena2, cadena3="";

        System.out.println("Ingrese la primera cadena: ");
        cadena1=br.readLine();
        System.out.println("Ingrese la segudna cadena: ");
        cadena2=br.readLine();
       
        for(i=0;i<cadena1.length();i++){
            cadena3+=cadena1.charAt(i);
            for(j=k;j<cadena2.length();j++){
               cadena3+=cadena2.charAt(j);
               j=cadena2.length();
               k++;
            }
        }
        System.out.println("La cadena intercalada es: "+cadena3);
    }
}


5.       Ingrese un texto e indique que letras no han aparecido en el texto.

SOLUCIÓN:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Ejerc20 {
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        int ini, con=0;               
        String texto, nueva="", mensaje="";

        System.out.println("Ingrese el texto a evaluar: ");
        texto=br.readLine();

        for(ini=0;ini<texto.length();ini++){
            if(texto.charAt(ini)!=' '){
                nueva=nueva+texto.charAt(ini);
            }
        }
        nueva=nueva.toLowerCase();
        for(char caracter='a';caracter<='z';caracter++){
            for(ini=0;ini<nueva.length();ini++){           
            if(caracter==nueva.charAt(ini)){
                 con++;
               }
            }
            if(con==0){
                mensaje+=caracter+" ";
            }
            con=0;
        }
        System.out.println("\nLos caracteres que faltan son: \n"+mensaje);
    }
}

  
6.  Ingrese un texto e indique el porcentaje de palabras que tiene menos de 5 caracteres  y el porcentaje de palabras con 5 o más caracteres.

SOLUCIÓN:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Ejerc21 {
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        int i;
        double porcentaje1, porcentaje2, con=0, p5=0, p6=0;
        String texto, palabra="";

        System.out.println("Ingrese el texto a evaluar: ");
        texto=br.readLine();
        texto=texto+" ";
        for(i=0;i<texto.length();i++){
            palabra+=texto.charAt(i);
            if(texto.charAt(i)==' '){
                palabra=palabra.trim();
                if(palabra.length()<5){
                    p5++;
                }
                else{
                    p6++;
                }
                palabra="";
                con++;
            }
        }
       
        porcentaje1=(double)((p5/con)*100);
        porcentaje2=(double)((p6/con)*100);
        System.out.println("El porcentaje de palabras con menos de 5 caracteres es: "+porcentaje1+" %");
        System.out.println("El porcentaje de palabras con 5 o mas caracteres es: "+porcentaje2+" %");
    }
}


7.   Escriba un programa que lea una frase y a continuación visualice cada palabra de la frase en columnas,  seguida del número de letras que tiene cada palabra.

SOLUCIÓN:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Ejerc23 {
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        int i, j;
        String frase, palabra="", nueva="";
        System.out.println("Ingrese la frase a evaluar: ");
        frase=br.readLine();
        frase+=" ";

        for(i=0;i<frase.length();i++){
            palabra+=frase.charAt(i);
            if(frase.charAt(i)==' '){
                palabra=palabra.trim();
                nueva=palabra;
                for(j=0;j<nueva.length();j++){
                    System.out.println("\t"+nueva.charAt(j));
                }
                System.out.println("\t"+nueva.length()+"\n\n");
                palabra="";
            }
        }
    }
}


8.  Escriba un programa que calcule la frecuencia de aparición de las vocales de un texto porcionado por el usuario. Esta solución se debe presentar en forma de histograma, por ejmplo:
             a   15     ***************
             e    8     ********

SOLUCIÓN:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Ejerc24 {
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        int i, c1=0, c2=0,c3=0, c4=0, c5=0;
        String texto, m1="", m2="", m3="", m4="", m5="";

        System.out.println("Ingrese el texto a evaluar: ");
        texto=br.readLine();
        texto=texto.toLowerCase();
        for(i=0;i<texto.length();i++){
              if(texto.charAt(i)=='a'){
                  c1++;
                  m1+="*";
              }
              if(texto.charAt(i)=='e'){
                  c2++;
                  m2+="*";
              }
              if(texto.charAt(i)=='i'){
                  c3++;
                  m3+="*";
              }
              if(texto.charAt(i)=='o'){
                  c4++;
                  m4+="*";
              }
              if(texto.charAt(i)=='u'){
                  c5++;
                  m5+="*";
              }
        }
        System.out.println("");
        System.out.println("a"+"    "+c1+"    "+m1);
        System.out.println("e"+"    "+c2+"    "+m2);
        System.out.println("i"+"    "+c3+"    "+m3);
        System.out.println("o"+"    "+c4+"    "+m4);
        System.out.println("u"+"    "+c5+"    "+m5);
    }
}


9.  Escribir un programa que cuente el número de palabras en un texto, que tengan al menos cuatro vocales diferentes. 


SOLUCIÓN:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Ejerc25 {
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        int i, con=0, c1=0, c2=0, c3=0, c4=0, c5=0, vocales;
        String texto, palabra="";

        System.out.println("Ingrese la palabra a evaluar: ");
        texto=br.readLine();
        texto=texto.toLowerCase();
        texto+=" ";
        for(i=0;i<texto.length();i++){
            palabra+=texto.charAt(i);
            if(texto.charAt(i)==' '){
                palabra=palabra.trim();
                for(int j=0;j<palabra.length();j++){
                    if(palabra.charAt(j)=='a'){
                    c1++;
                    if(c1>1){
                        c1=1;
                    }
              }
              if(palabra.charAt(j)=='e'){
                  c2++;
                  if(c2>1){
                        c2=1;
                    }
              }
              if(palabra.charAt(j)=='i'){
                  c3++;
                  if(c3>1){
                        c3=1;
                    }
              }
              if(palabra.charAt(j)=='o'){
                  c4++;
                  if(c4>1){
                        c4=1;
                    }
              }
              if(palabra.charAt(j)=='u'){
                  c5++;
                  if(c5>1){
                        c5=1;
                    }
              }
                }
                palabra="";
                vocales=c1+c2+c3+c4+c5;
                c1=0; c2=0; c3=0; c4=0; c5=0;
                if(vocales>=4){
                    con++;               
                }
            }
        }       
        System.out.println("Las palabras son: "+con);
    }
}


10. Un grupo de inteligencia militar desea codificar los mensajes secretos de tal forma que no puedan ser interpretados con una lectura directa, para lo cual han establecido las siguientes reglas:
       a) Todo mensaje debe estar sus letras en mayúsculas.
   b) Reemplazar cada letra por la que sigue según abecedario, excepto Z que  se deberá reemplazar con la letra A.
    c) reemplazar cada dígito encontrado por el siguiente numero excepto el 9 que  deberá ser reemplazado por el 0.


SOLUCIÓN:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class mensajemilitar {
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        String mensaje, cod1="",cod2="", caracter;
        String ABC="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        String numeros="0123456789";

        System.out.println("Ingrese el mensaje: ");
        mensaje=br.readLine();
        System.out.println(""+mensaje);
        mensaje=mensaje.toUpperCase();
        for (int i = 0; i < mensaje.length(); i++) {
            caracter=mensaje.substring(i, i+1);
            if(caracter.equals(" ")){
                cod1=cod1+caracter;
            }
            else{
                for (int j = 0; j < ABC.length(); j++) {
                if(caracter.equals(ABC.substring(j,j+1))){
                    if(caracter.equals("Z")){
                        cod1=cod1+"A";
                        break;
                    }
                    else{
                        cod1=cod1+ABC.substring(j+1,j+2);
                        break;
                    }
                }
            }
            for (int k = 0; k <numeros.length(); k++) {
                if(caracter.equals(numeros.substring(k,k+1))){
                    if(caracter.equals("9")){
                        cod1=cod1+"0";
                        break;
                    }
                    else{
                        cod1=cod1+numeros.substring(k+1,k+2);
                        break;
                    }
                }
            }
            }
           
        }
        System.out.println("\nMENSAJE INGRESADO: "+mensaje);
        System.out.println("CODIGO RESULTANTE "+cod1);
    }

}

5 comentarios:

  1. haga un programa que le pregunte al usuario cuantos caracteres tendrá la frase y dependiendo de eso generar una frase aleatoria con el mismo número de caracteres pedidos:
    Ejemplo :
    Cuantos caracteres tendrá la frase : 14
    Cadena generada : t9p_mb/pat;.$x

    ...AYUDA NOSE COMO HACER ESTE D:

    ResponderEliminar
    Respuestas
    1. import java.util.Scanner;

      public class Cadena {
      static private Scanner leer = new Scanner(System.in);

      public static void main(String[] args) {


      int caracteres = 0;
      try {
      caracteres= pideCaracteres();
      }
      catch(NumberFormatException e){
      System.out.println("Entrada Invalida");
      System.out.println(e.getMessage());
      caracteres = pideCaracteres();
      }

      System.out.println(genCadena(caracteres));
      }

      public static int pideCaracteres()throws NumberFormatException{
      System.out.print("Introzuca numero de caracteres:");
      int num = Integer.parseInt(leer.nextLine());
      if (num < 1) throw new NumberFormatException("El numero ha de ser mayor que 0.");
      return num;
      }

      public static String genCadena(int num){
      String cadena = new String();
      for(int i = 0;i < num; i++){
      cadena += (char)(int)(Math.random()*(254)-1);
      }
      return cadena;
      }

      }


      * Lo suyo sería hacer una excepción para el num < 1 en lugar de usar la NumberFormatException pero el resultado es el mismo y habría que poner un bloque catch más. Creo que así queda bastante claro. Espero que te ayude.

      Eliminar
    2. Me he dado cuenta de que la excepción así no sirve de mucho, mejor de esta otra forma:

      import java.util.Scanner;

      public class Cadena {
      static private Scanner leer = new Scanner(System.in);

      public static void main(String[] args) {
      int caracteres = pideCaracteres();
      System.out.println(genCadena(caracteres));
      }

      public static int pideCaracteres(){
      System.out.print("Introzuca numero de caracteres:");
      int num = 0;
      try{
      num = Integer.parseInt(leer.nextLine());
      if (num < 1) throw new NumberFormatException("El numero ha de ser mayor que 0.");
      }
      catch(NumberFormatException e){
      System.err.println("Entrada Invalida");
      System.err.println(e.getMessage());
      return pideCaracteres();
      }
      return num;
      }

      public static String genCadena(int num){
      String cadena = new String();
      for(int i = 0;i < num; i++){
      cadena += (char)(int)(Math.random()*(254)-1);
      }
      return cadena;
      }

      }

      Eliminar
  2. me pueden ayudar a hacer un diagrama que me permita ingresar una palabra y contar cuantas letras tiene.

    ResponderEliminar
  3. Ayuda.hacer un programa que permita leeresultados 5 palabras. Imprima e indique la cantidad de caracteres que tiene esa palabra y si su cantidad de caracter es para o impar, si esa palabra tiene longitud de 8 o más caracteres hallar la raíz cuadrama de la longitud es indicar si la longitud de esa palabra es múltiplo de la raíz, si sono múltiplos y la raíz es un número par imprimir todos los números impares desde la raíz hasta el 100. Si son múltiplos y la raíz es un número impar imprimir todos los numeros impares desde la raíz hasta 100

    ResponderEliminar