Programación

1º DAM/DAW - Curso 2026-2027

User Tools

Site Tools


apuntes:cadenas

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
apuntes:cadenas [2021/11/01 19:14] – [Ejemplos] Santiago Faciapuntes:cadenas [2026/10/28 22:55] (current) – [Ejercicios] Santiago Faci
Line 4: Line 4:
  
 Hay que tener en cuenta que, puesto que las cadenas de texto en Java son inmutables, todos los métodos que realizan operaciones sobre un objeto ''String'' siempre devuelven el resultado, nunca lo ejecutan sobre el propio objeto. En el caso de los métodos ''static'' ocurre lo mismo. Hay que tener en cuenta que, puesto que las cadenas de texto en Java son inmutables, todos los métodos que realizan operaciones sobre un objeto ''String'' siempre devuelven el resultado, nunca lo ejecutan sobre el propio objeto. En el caso de los métodos ''static'' ocurre lo mismo.
 +
 +===== A tener en cuenta =====
 +
 +  - El tipo ''String'' es una clase asi que las cadenas de texto realmente son objetos Java
 +  - Al tratarse de un objeto, podemos realizar algunas operaciones sobre la misma variable/objeto, como veremos más adelante
 +  - Java nos permite utilizarlo como si fuera un tipo primitivo (aunque no lo sea) puesto que es un dato muy utilizado y asi nos será más cómodo
 +  - Como realmente es un objeto, su valor por defecto será ''null''
 +  - Cualquier valor puede ser representado como una cadena de texto, por lo que normalmente será el tipo de dato utilizado siempre que se quiera recoger algún input del usuario
 +
 +===== Cuándo utilizar una cadena de texto =====
 +
 +Por supuesto, usaremos una cadena cuando queramos almacenar texto.
 +
 +A veces, incluso cuando el valor que se quiere almacenar está compuesto exclusivamente de dígitos, éste debe almacenarse como cadena de texto, puesto que no son valores numéricos realmente ya que no soportan ninguna operación matemática ni se espera que se haga ninguna con ellos.
 +
 +Estos son algunos ejemplos:
 +  - DNI
 +  - Número de la Seguridad Social
 +  - Cuenta Bancaria
 +  - Teléfono
 +
 +Y si fuera necesario realizar alguna operación con sus dígitos (calcular dígitos de control, por ejemplo) siempre se puede recurrir al parseo del valor para realizar esos cálculos.
 +
 +Y, en definitiva, hay que tener en cuenta que todo input de usuario (tanto de consola como a través de formularios) viene siempre en forma de texto y somos nosotros quienes tenemos luego que parsearlo al tipo correcto (tras las comprobaciones)
 +
 +=== Casos de uso con cadenas ===
 +
 +  - Un usuario introduce su nombre y apellidos en una caja de texto
 +    * Convertir a mayúscula/minúscula y eliminar los espacios a inicio y final
 +  - Un usuario introduce su número de cuenta
 +    * Convertir la cadena en un array de caracteres para realizar el cálculo del digito de control
 +  - Un usuario introduce su número de DNI (con letra)
 +    * Convertimos el valor a un número para hacer los cálculos y luego lo almacenamos todo junto (con letra) concatenando.
 +  - Un usuario introduce un precio en un formulario
 +    * Tras las comprobaciones (caja de texto vacía o valor sólo compuesto por dígitos) tendremos que parsearlo al tipo de dato que corresponda (float en este caso)
  
 ===== Extracción de un caracter particular ===== ===== Extracción de un caracter particular =====
Line 42: Line 77:
  
 <code java> <code java>
-String nombre = "Asociación Española de Programadores Informáticos";+String nombre = "CodeAndCoke";
  
 // Devuelve la subcadena desde la posición 10 en adelante // Devuelve la subcadena desde la posición 10 en adelante
 String subcadena = nombre.substring(10); String subcadena = nombre.substring(10);
-System.out.println(subcadena);      // Española de Programadores Informáticos +System.out.println(subcadena);      // e
 // Devuelve la subcadena entre dos posiciones dadas // Devuelve la subcadena entre dos posiciones dadas
 subcadena = nombre.substring(5, 10); subcadena = nombre.substring(5, 10);
-System.out.println(subcadena);      // ación+System.out.println(subcadena);      // ndCok
 </code> </code>
  
Line 58: Line 92:
  
 <code java> <code java>
-String nombre = "Asociación Española de Programadores Informáticos"; +String nombre = "CodeAndCoke"; 
-String nombreCorto = "AEPI";+String nombreCorto = "CAC";
 if (nombre.equals(nombreCorto)) { if (nombre.equals(nombreCorto)) {
     System.out.println("Las dos cadenas son iguales");     System.out.println("Las dos cadenas son iguales");
Line 73: Line 107:
  
 <code java> <code java>
-String nombre = "Asociación Española de Programadores Informáticos";+String nombre = "CodeAndCoke";
 String nombreMinusculas = nombre.toLowerCase(); String nombreMinusculas = nombre.toLowerCase();
-System.out.println(nombreMinusculas);   // asociación española de programadores informáticos+System.out.println(nombreMinusculas);   // codeandcoke
  
-String nombre = "Asociación Española de Programadores Informáticos";+String nombre = "CodeAndCoke";
 String nombreMayusculas = nombre.toUpperCase(); String nombreMayusculas = nombre.toUpperCase();
-System.out.println(nombreMayusculas);   // ASOCIACIÓN ESPAÑOLA DE PROGRAMADORES INFORMÁTICOS+System.out.println(nombreMayusculas);   // CODEANDCOKE
 </code> </code>
  
Line 87: Line 121:
  
 <code java> <code java>
-String nombre = "Asociación Española de Programadores Informáticos"; +String nombre = "code and coke"; 
-int posicion = nombre.indexOf("Española");+int posicion = nombre.indexOf("and");
 if (posicion == -1) { if (posicion == -1) {
-    System.out.println("La palabra 'Española' no se encuentra en el nombre");+    System.out.println("La palabra 'and' no se encuentra en el nombre");
 } }
 else { else {
-    System.out.println("Se ha encontrado la cadena 'Española' en la posición " +    System.out.println("Se ha encontrado la cadena 'and' en la posición " 
                         + posicion);                         + posicion);
 } }
Line 103: Line 137:
  
 <code java> <code java>
-String nombre = "Asociación Española de Programadores Informáticos"; +String nombre = "CodeAndCoke"; 
-String busqueda = "Programadores"; +String busqueda = "Coke"; 
-String reemplazo = "Desarrolladores";+String reemplazo = "Code";
 nombre = nombre.replace(busqueda, reemplazo); nombre = nombre.replace(busqueda, reemplazo);
-System.out.println(nombre);  // Asociación Española de Desarrolladores Informáticos+System.out.println(nombre);  // CodeAndCode
 </code> </code>
  
Line 136: Line 170:
  
 <code java> <code java>
-String cadena = "AEPI";+String cadena = "CODE";
 char[] caracteres = cadena.toCharArray(); char[] caracteres = cadena.toCharArray();
-System.out.println(Arrays.toString(caracteres));  // ['A', 'E', 'P', 'I']+System.out.println(Arrays.toString(caracteres));  // ['C', 'O', 'D', 'E']
 </code> </code>
  
Line 145: Line 179:
 ====== Ejercicios ====== ====== Ejercicios ======
  
 +{{ ejercicio.png}}
 +
 +  - Haz un programa que solicite dos números y diga si son o no iguales
 +  - Realiza un programa que solicite un número y diga si es positivo o negativo
 +  - Realiza un programa que solicite tres números y los pinte en la pantalla ordenados de menor a mayor. Si el usuario introduce el 10, el 20 y el 2, el programa mostrará: "2 10 20"
 +  - Realiza un programa que solicite un número entre 1 y 1000 e indique cuántos dígitos tiene
 +  - Haz un programa que calcule el área de diferentes forma geométricas. Puedes hacer un menú donde el usuario pueda escoger entre algunas de ellas (cuadrado, rectángulo, círculo, triángulo, . . .). El programa deberá pedir también las medidas necesarias y, finalmente, mostrará el área de la figura.
 +  - Realiza un programa donde el usuario tenga que introducir 3 números y el programa calcule cuál de ellos es el mayor de todos. Lo mostrará por pantalla.
 +  - Realiza un programa que permite introducir al usuario una hora (formato 12 o 24 horas, hora, minuto y segundo por separado) y compruebe que es correcto cada uno de los datos que éste introduzca. En caso de fallo hará que el usuario vuelva a introducir el dato erróneo.
 +  - Realiza una aplicación que solicite por pantalla 3 números y los guarde en una cadena de texto separados por un espacio. Por ejemplo, si el usuario introduce el 2, el 13 y el 235, el programa los almacena como "2 13 235" y lo pinta en la pantalla.
 +  - Realiza un programa que comience solicitando al usuario dos números cualesquiera. El programa tendrá que mostrar por pantalla la secuencia completa de números enteros que vayan desde el número menor al mayor de los introducidos. Por ejemplo, si el usuario introduce los números 20 y 12 el programa hará aparecer la siguiente secuencia (uno por línea): 12, 13, 14, 15, 16, 17, 18, 19, 20.
 +  - Realiza un programa que comience solicitando al usuario dos números cualesquiera. A continuación, tendrá que mostrar, de forma similar al ejercicio anterior, la secuencia de números entre los que ha introducido el usuario, pero sólo mostrará los pares. Por ejemplo, si el usuario introduce el 10 y el 20, el programa hará aparecer la siguiente secuencia por pantalla: 10, 12, 14, 16, 18, 20
 +  - Realiza un programa como el anterior pero será el usuario quién decida si de la secuencia final de números que se deben mostrar, lo harán los pares o los impares. Esa información se la solicitará el programa tras pedirle los dos números iniciales.
 +  - Realiza una aplicación que funcione como conversor de monedas entre dos divisas (dólar y euro). Al iniciar la aplicación se presentarán al usuario las dos opciones (pasar de dólares a euros y viceversa) y el usuario tendrá que seleccionar una de las dos. A continuación, se le solicitará la cantidad, que deberá introducir. Para finalizar, el programa mostrará, al usuario por pantalla, la cantidad convertida a la divisa que procesa en cada caso.
 +  - Realiza un programa que solicite al usuario un número cualquiera y le indique al usuario si el número introducido es par o impar. El programa solicitará siempre un nuevo número hasta que el usuario decida salir (puedes crear un menú o bien seleccionar un texto que sirva como forma de indicar que se desea salir).
 +  - Realiza un programa donde el ordenador se piense un número y el usuario tenga un número límite de intentos para adivinarlo. El programa permitirá al usuario fijar ese número límite de intentos y por cada uno de ellos dará una pista indicando si el número que se ha pensado es mayor o menor que el introducido. Una vez que el usuario adivine el número o bien gaste el número de intentos se terminará el programa. En caso de que el usuario pierda se mostrará el número pensado por el ordenador. (Justo antes de los ejercicios puedes consultar cómo generar un número aleatorio y guardarlo en una variable).
   - Realiza un programa que sea capaz de seleccionar, aleatoriamente, una palabra de entre 5 que introducirá el usuario por teclado   - Realiza un programa que sea capaz de seleccionar, aleatoriamente, una palabra de entre 5 que introducirá el usuario por teclado
   - Realiza una aplicación donde el usuario pueda almacenar información de personas (nombre, apellidos y dirección), de forma que luego pueda buscar por apellido a cualquiera de ellas. Puedes preparar un menú donde el usuario pueda escoger entre introducir una nueva persona o buscar a alguien   - Realiza una aplicación donde el usuario pueda almacenar información de personas (nombre, apellidos y dirección), de forma que luego pueda buscar por apellido a cualquiera de ellas. Puedes preparar un menú donde el usuario pueda escoger entre introducir una nueva persona o buscar a alguien
Line 150: Line 200:
   - Utilizando matrices, diseña el tablero del juego del 3 en raya y permite al jugador jugar contra el ordenador   - Utilizando matrices, diseña el tablero del juego del 3 en raya y permite al jugador jugar contra el ordenador
   - Implementa ahora el juego anterior pero en esta ocasión permite que dos personas jueguen una contra otra   - Implementa ahora el juego anterior pero en esta ocasión permite que dos personas jueguen una contra otra
-  - Realiza una aplicación que compruebe si un número de DNI (con la letra) es correcto. Puedes consultar [[http://www.interior.gob.es/web/servicios-al-ciudadano/dni/calculo-del-digito-de-control-del-nif-nie|aqui]] las reglas que se siguen para calcular la letra a partir de los dígitos.+  - Realiza una aplicación que compruebe si un número de DNI (con la letra) es correcto. Puedes consultar [[https://www.interior.gob.es/opencms/ca/servicios-al-ciudadano/tramites-y-gestiones/dni/calculo-del-digito-de-control-del-nif-nie/|aqui]] las reglas que se siguen para calcular la letra a partir de los dígitos.
   - Idea algún mecanismo que permita saber si una dirección de email que introduce el usuario es correcta   - Idea algún mecanismo que permita saber si una dirección de email que introduce el usuario es correcta
   - Idea algún algoritmo que permita saber si algo introducido por el usuario es un número entero o con decimales   - Idea algún algoritmo que permita saber si algo introducido por el usuario es un número entero o con decimales
   - Escribe un programa que reciba una cadena de texto y escriba por pantalla esa misma cadena pero al revés   - Escribe un programa que reciba una cadena de texto y escriba por pantalla esa misma cadena pero al revés
   - El método ''Character.isDigit(char)'' permite saber si un caracter es o no un dígito. Implementa una aplicación que permita saber si un texto introducido por el usuario es un número (se permiten introducir tantos caracteres como el usuario decida)   - El método ''Character.isDigit(char)'' permite saber si un caracter es o no un dígito. Implementa una aplicación que permita saber si un texto introducido por el usuario es un número (se permiten introducir tantos caracteres como el usuario decida)
 +  - Realiza un ejercicio que permita convertir números escritos como cadenas de texto (por ejemplo, "treinta y tres") al número escrito como digitos (por ejemplo, "33"). Considera limitar el rango de números aceptados para simplificarlo. Por ejemplo, solamente hacerlo para números entre 0 y 100.
  
 ---- ----
  
-(c) 2019-2021 Santiago Faci+(c) 2019-{{date>%Y}} Santiago Faci
apuntes/cadenas.1635794059.txt.gz · Last modified: by Santiago Faci