Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio ING1310 – Introducción a la Computación String Carlos Reveco creveco@dcc.uchile.cl careveco@miuandes.cl Facultad de Ingeniería/Universidad de los Andes/Chile Rev : 227 C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 1 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio En esta clase 1 2 3 Repaso clase anterior Ejercicio Clase 14 Enunciado Solución Clase String Definición Métodos 4 Ejemplo 5 Ejercicio C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 2 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Repaso clase anterior C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 3 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Arreglos Multidimensionales • Los arreglos guardan un conjunto de objetos. • Los arreglos son objetos. • Por lo tanto, se pueden tener arreglos que guarden arreglos. • En la declaración se indica cuantas dimensiones tiene el arregl: int [][][] cubo = new int [10][10][10]; • Se pueden definir arreglos de tantas dimensiones como uno quiera. boolean [][] arreglo = new boolean [2][]; arreglo [0]= new boolean [3]; arreglo [1]= new boolean [1]; arreglo [2]= new boolean [5]; C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 4 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Acceso a elementos • Para asignar o leer un elemento del arreglo, se debe indicar el índice de cada dimensión. • Ejemplos: Persona [][] Curso [0][0] Curso [4][7] Curso [7][2] curso = new Persona [10][8]; = new Persona ( " Esteban Trabajos " ); = new Persona ( " Juan Pastor " ); = new Persona ( " Guillermo Puertas " ); int [][] matriz = new int [10][5] Random rnd = new Random (); for ( int i =0; i < matriz . length ; i ++){ for ( int k = 0; k < matriz . length [ i ]; k ++){ matriz [ i ][ k ] = rnd . nextInt (10); } } C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 5 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Ejercicio Clase 14 C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 6 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Ejercicio Clase 14 Enunciado C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 7 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Ejercicio Arreglos: Matriz dentro de otra Implemente el método: boolean revisarInclusion(int[][] matriz, int[][] pedazo) que retorna verdadero si pedazo está incluído en algún lugar de matriz (no importa cuantas veces esté, con una es suficiente). C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 8 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Ejercicio Clase 14 Solución C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 9 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Solución public boolean r e v i s a r I n c l u s i o n ( int [][] matriz , int [][] pedazo ) { for ( int i = 0; i <= matriz . length - pedazo . length ; i ++) { for ( int j = 0; j <= matriz [0]. length - pedazo [ i ]. length ; j ++) { boolean encontrada = true ; for ( int m = 0; m < pedazo . length ; m ++) { for ( int n = 0; n < pedazo [ m ]. length ; n ++) { if ( matriz [ i + m ][ j + n ] != pedazo [ m ][ n ]) encontrada = false ; } } if ( encontrada ) return true ; } } return false ; } C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 10 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Clase String C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 11 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Clase String Definición C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 12 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Motivación • Ya hemos mencionado que String es una clase que viene definida en Java. • Representa una cadena de carácteres. • Cada caracter se define con el tipo char • También pueden interpretarse de forma numérica con valores entre 0 y 255. • La representación de esos valores está dada por la tabla ASCII. • Revisaremos algunos métodos útiles que tiene esta clase. • Para detalles de más métodos revisar la documentación oficial: http://java.sun.com/javase/6/docs/api/java/lang/String.html C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 13 / 29 000d 001d 002d 003d 004d 005d 006d 007d 008d 009d 010d 011d 012d 013d 014d 015d 016d 017d 018d 019d 020d 021d 022d 023d 024d 025d 026d 027d 028d 029d 030d 031d 032d 033d 034d 035d 036d ␀ ␁ ␂ ␃ ␄ ␅ ␆ ␇ ␈ ␊ ␋ ␍ ␎ ␏ ␐ ␑ ␒ ␓ ␔ ␕ ␖ ␗ ␘ ␙ ␛ ␜ ␝ ␞ ␟ ␣ ! " # $ (nul) (soh) (stx) (etx) (eot) (enq) (ack) (bel) (bs) (tab) (lf) (vt) (np) (cr) (so) (si) (dle) (dc1) (dc2) (dc3) (dc4) (nak) (syn) (etb) (can) (em) (eof) (esc) 037d 038d 039d 040d 041d 042d 043d 044d 045d 046d 047d 048d 049d 050d 051d 052d 053d 054d 055d 056d 057d 058d 059d 060d 061d 062d 063d 064d 065d 066d 067d 068d 069d 070d 071d 072d 073d % & ' ( ) * + ’ . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I 074d 075d 076d 077d 078d 079d 080d 081d 082d 083d 084d 085d 086d 087d 088d 089d 090d 091d 092d 093d 094d 095d 096d 097d 098d 099d 100d 101d 102d 103d 104d 105d 106d 107d 108d 109d 110d J K L M N O P Q R S T U V W X Y Z [ \ ] ˆ _ ‘ a b c d e f g h i j k l m n 111d 112d 113d 114d 115d 116d 117d 118d 119d 120d 121d 122d 123d 124d 125d 126d 127d 128d 129d 130d 131d 132d 133d 134d 135d 136d 137d 138d 139d 140d 141d 142d 143d 144d 145d 146d 147d o p q r s t u v w x y z { | } ˜ ␡ e ‚ f „ ... † ‡ ^ % Š ‹ Œ Ž ‘ ’ “ 148d 149d 150d 151d 152d 153d 154d 155d 156d 157d 158d 159d 160d 161d 162d 163d 164d 165d 166d 167d 168d 169d 170d 171d 172d 173d 174d 175d 176d 177d 178d 179d 180d 181d 182d 183d 184d ” • – –~ ™ š › œ ž Ÿ ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ 185d 186d 187d 188d 189d 190d 191d 192d 193d 194d 195d 196d 197d 198d 199d 200d 201d 202d 203d 204d 205d 206d 207d 208d 209d 210d 211d 212d 213d 214d 215d 216d 217d 218d 219d 220d 221d ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý 222d 223d 224d 225d 226d 227d 228d 229d 230d 231d 232d 233d 234d 235d 236d 237d 238d 239d 240d 241d 242d 243d 244d 245d 246d 247d 248d 249d 250d 251d 252d 253d 254d 255d Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Clase String Métodos C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 15 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Método charAt • Retorna el caracter en una posición determinada. • Parámetros → índice de la posición (empiezan desde el 0). • Retorno → caracter en esa posición. Ejemplo: Método charAt String texto = new String ( " ING1310 - UAndes " ); char c1 = texto . charAt (0); char c2 = texto . charAt (12); System . out . println ( c1 + " , " + c2 ); • Output1 → I, n. 1 No olviden que los espacios también se cuentan. C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 16 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Método compareTo • Compara el String con otro de forma lexicográfica. • Parámetros → otro String con el cual compararse. • Retorno → diferencia entre el primer caracter distinto encontrado. • Si son iguales retorna 0. Ejemplo: Método compareTo String texto1 = new String ( " Hombre " ); String texto2 = new String ( " Hombro " ); int diff12 = texto1 . compareTo ( texto2 ); int diff21 = texto2 . compareTo ( texto1 ); System . out . println ( diff12 + " , " + diff21 ); • Output → -10, 10. C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 17 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Método equals • Indica si dos String son iguales. • Parámetros → otro String con el cual compararse. • Retorno → true si ambos String tienen el mismo contenido. false en otro caso. Ejemplo: Método equals String texto1 = new String ( " Hombre " ); String texto2 = new String ( " Hombro " ); String texto3 = new String ( " Hombre " ); boolean comp12 = texto1 . equals ( texto2 ); boolean comp13 = texto1 . equals ( texto3 ); System . out . println ( comp12 + " , " + comp13 ); • Output → false, true. • También existe el método equalsIgnoreCase el cual compara sin hacer diferencia entre mayúsculas y minúsculas. C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 18 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Método length • Indica el número de caracteres que forman el texto representado por el String • Parámetros → No necesita. • Retorno → Largo del String. Ejemplo: Método length String texto = new String ( " ING1310 - UAndes " ); System . out . println ( " Largo : " + texto . length ()); • Output → Largo: 16. C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 19 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Método substring • Permite obtener un subconjunto del texto que representa el String. • Parámetros → Hay distintas versiones. • (int ini) • (int ini, int fin) → no incluye al último. • Retorno → un String que representa el subconjunto. Ejemplo: Método substring String texto = new String ( " ING1310 - UAndes " ); String sub1 = texto . substring (10); String sub2 = texto . substring (10 , 12); System . out . println ( sub1 + " , " + sub2 ); • Output → UAndes, UA. C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 20 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Método indexOf • Busca la primera aparición de un cierto texto dentro del String. • Parámetros → Hay distintas versiones. • (String text) • (String text, int ini) • Retorno → Ubicación del primer caracter del texto buscado. • Si no encuentra el texto retorna −1. Ejemplo: Método indexOf String texto = new String ( " nadie puede nadar " ); int pos1 = texto . indexOf ( " nad " ); int pos2 = texto . indexOf ( " nad " , pos1 + 1); int pos3 = texto . indexOf ( " nad " , pos2 + 1); System . out . println ( pos1 + " , " + pos2 + " , " + pos3 ); • Output → 0, 12, -1. • También existe el método lastIndexOf que busca de derecha a izquierda. C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 21 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Conversiones • Muchas veces queremos convertir un String a un número. • Para eso podemos utilizar los siguientes métodos. • Son métodos especiales que se llaman directamente desde la clase. Sintáxis Java: Convertir String double Double . parseDouble ( String ); int Integer . parseInt ( String ); C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 22 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Sintaxis x.length( ) x.equals(y) Significado Nº de caracteres ¿ x es igual a y ? tipo int bool x.compareTo(y) 0 si x == y Nº < 0 si x < y Nº > 0 si x > y carácter ubicado en el indice i (desde 0) int x.charAt(i) char x.indexOf(y) índice de primer y en x (-1 si no está) int x.indexOf(y,i) índice de y en x (a partir de i) int C.Reveco Ejemplo Ejercicio Ej: String s=“casa” s.length( )=4 s.equals(“casa”)=true s.equals(“Casa”)=false s.equals(“casa”)=0 s.compareTo(“casas”)<0 s.compareTo(“Casa”)>0 s.charAt(2)=’s’ Facultad de Ingeniería/Universidad de los Andes/Chile s.charAt(0)=’c’ s.charAt(4) error s.indexOf(“as”)=1 s.indexOf(“a”)=1 s.indexOf(“hola”)=-1 s.indexOf(“a”,2)=3 ING1310– Clase 16 23 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Métodos que devuelven String (y no modifican String original) x.substring(i,j) string con caracteres s.substring(1,3) entre índices i y j-1 s.substring(2,3) x.substring(i) x.substring(i,x.length()) s.substring(1) x.concat(y) concatena x e y s.concat(“do”) (añade y al final de x) s + “do” x.replace(y,z) reemplaza todos los s.replace(‘a’,’e’) caracteres y por z x.toUpperCase() reemplaza minúsculas s.toUpperCase() por mayúsculas x.toLowerCase() reemplaza mayúsculas s.toLowerCase() por minúsculas x.trim() elimina espacios al “ a b “.trim() comienzo y fin C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 Ejercicio “as” “s” “asa” “casado” “cese” “CASA” “casa” “a b” 24 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Ejemplo C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 25 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Enunciado Ejercicio String: Palindrome • Hacer una clase método Palindrome, que reciba un String y responda si verdadero si una palabra es palíndrome. • Un palíndrome es una palabra, número o frase que se lee igual hacia adelante que hacia atrás. boolean palindrome ( String x ) palindrome ( " reconocer " )= true palindrome ( " anita lava la tina " )= true C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 26 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Respuesta public boolean palindrome ( String cadena ){ boolean valor = true ; int i , ind ; String cadena2 = " " ; for ( int x =0; x < cadena . length (); x ++) { if ( cadena . charAt ( x ) != ’ ’) cadena2 += cadena . charAt ( x ); } cadena = cadena2 ; ind = cadena . length (); for ( i = 0 ; i < ( cadena . length ()); i ++){ if ( cadena . substring (i , i +1). equals ( cadena . substri valor = false ; break ; } ind - -; } return valor ; } C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 27 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Ejercicio C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 28 / 29 Repaso clase anterior Ejercicio Clase 14 Clase String Ejemplo Ejercicio Ejercicio String: Combinar textos Hacer una clase llamada Combinacion. La clase debe recibir dos String en el constructor. Debe tener métodos para las siguientes acciones: • Retornar un String formado por la intercalación de las letras de cada una de las palabras. • Retornar la cantidad de veces que aparece en total un cierto texto recibido como parámetro (debe ser la suma de las apariciones en ambos textos). • Retornar el resultado de la comparación entre dos substrings de los textos, recibiendo como parámetro el índice inicial y final (iguales para ambos textos). C.Reveco Facultad de Ingeniería/Universidad de los Andes/Chile ING1310– Clase 16 29 / 29