Clase 8: Strings Valeria Herskovic –

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

PHP. PHP (Hypertext Preprocessor) preprocesador de Hipertexto Se ejecuta en el servidor El resultado de ejecutarse es código HTML Manual oficial en
EL LENGUAJE DE PROGRAMACIÓN C
Fundamentos de la Programación Estructurada
Variables Prof. Gonzalo Pastor.
1.2 Sintaxis del lenguaje Java.
Cadenas y apuntadores Programación.
El lenguaje de programación Java
JAVA J.A.C..
Tema 2: Los tipos de datos
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Curso Programación en Java
El lenguaje de programación C - Identificadores y variables – Isidro González Caballero ( Introducción.
Compiladores (23/04/ :35) Compiladores Tema 3 Análisis Lexicográfico Scanners.
Programación orientada a objetos. El método main es el comportamiento por el cual comienzan todos los programas en Java, de la misma forma en la que C,
ELO3291 Estructuras fundamentales de la programación en Java ELO-329: Diseño y programación orientados a objetos Agustín J. González.
ELO3291 Estructuras fundamentales de la programación en Java ELO-329: Diseño y programación orientados a objetos Agustín J. González.
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
Capitulo 4 Arreglos o Arrays Unidimensionales Bidimensionales Strings
Fundamentos de Programación
Elementos básicos.  Fuertemente tipeado.  Sintaxis similar a C/C++.  Sin punteros: garbage collection.  Portable.  Integra librerías para objetos.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Applications Development I 6.1 Foro Tomas Anzalotta Alvarado.
Programación II Sesión 3. TABLA DE CONTENIDO  Tipos de Datos en C  Delimitadores  Tipo Char  Tipo Int  Tipo Float  Tipo Double  Constantes  Operadores.
Control, adquisición y monitoreo con Arduino y Visual Basic .net
Taller de Java Universidad de los Andes
Convenciones de nomenclatura y diseño
Tema 6: Elementos de programación adicionales
Operadores Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++.
¿Cómo almacenar datos dentro del computador?
Clase1: lectura/escritura/asignación
2.  Diagramas de Estado.
Uso de variables de tipo valor
BREVE INTRODUCCION A LA PROGRAMACION
Clase 8: Strings J.Alvarez.
Repaso/resumen lectura/escritura y asignación funciones
26-abril(J.Alvarez).
Clase 3: Funciones Valeria Herskovic –
Clase 9: Repaso/Resumen
Valeria Herskovic Clase 2: Funciones Valeria Herskovic

Clase 8: Strings J.Alvarez.
Clase 8: Repaso/Resumen
Clase 9: Repaso/Resumen
¿Qué es un OPERADOR? “Un operador es un elemento de programa que se aplica a uno o varios operandos en una expresión o instrucción. Los operadores que.
Clase 7: Abreviaturas Valeria Herskovic –
Teclado y Pantalla (Java estándar)
Unidad 3. Introducción a la programación
26-abril(J.Alvarez).
Clase 7: Repaso/Resumen
Aplicaciones de RECURSIVIDAD
TALLER DE CERTIFICACIÓN INTERNACIONAL
Características de “C”
PROGRAMACIÓN (2).
Qué es orientación a objeto ?
Clase 7 Strings 28 de Marzo (N.Baloian).
Clase 8: Strings J.Alvarez.
Introducción a la Computación Numérica
Clase 8: Strings 29-marzo (N.Baloian).
JAVA: elementos básicos
Repaso/resumen: Introducción a la Programación orientada a objetos
Clase 10 (Repaso/Resumen)
Ejemplos de uso //obtener una respuesta “si” o “no” static public String siNo(String x) throws IOException{ String r=U.readLine(x+” si o no?”) .trim().toLowerCase();
Problemas de Strings boolean palindrome(String x) Ej: palindrome(“reconocer”)=true boolean alfabetico(String x) Ej: alfabetico(“hola”)=true,

Clase1: lectura/escritura/asignación
Tratamientos secuenciales I
Clase 8: Strings.
Problema Un programa debe leer 2 números desde un objeto Console. El primero es el monto que un cliente debe pagar por una compra y el segundo la cantidad.
Transcripción de la presentación:

Clase 8: Strings Valeria Herskovic – vherskov@dcc.uchile.cl CC1001 Computación I

Problema Leer una lista de palabras y escribir la más larga (de más letras) y la mayor (alfabeticamente). El fin de la lista se indica con la palabra “fin” Ejemplo: Palabra(o fin) ? calculo Palabra(o fin)? algebra Palabra(o fin)? fisica Palabra(o fin)? computacion Palabra(o fin) ? fin Más larga = computacion Mayor = fisica

Algoritmo masLarga = “”, mayor=””; //palabras de cero letras while(true) { obtener una palabra if( palabra == “fin” ) break; if( largo de palabra > largo de masLarga ) masLarga=palabra; if( palabra > mayor ) mayor = palabra; } escribir masLarga y mayor

Programa String masLarga="", mayor=""; while(true) { String palabra=U.readLine("palabra(o fin)?"); if(palabra.equals("fin")) break; if(palabra.length() > masLarga.length()) masLarga=palabra; if( palabra.compareTo(mayor) > 0) mayor=palabra; } U.println("mas larga=" + masLarga); U.println("mayor=" + mayor);

Explicaciones String masLarga=””, mayor=””; inicializa con strings vacíos (cero caracteres) equivalencia: String masLarga; masLarga=””; String: clase predefinida (no es tipo, comienza con mayúscula) strings son objetos (no variables) operaciones a través de métodos (no operadores): objeto.metodo(argumentos)

U.readLine(“…”) palabra.equals("fin") palabra.length() lee una línea (desde el teclado), entrega string que contiene todos los caracteres antes de tecla enter. Ej: “la casa” si se detecta el fin de los datos entrega el valor null (no “”) palabra.equals("fin") compara Strings palabra y “fin” devuelve true sin son iguales, o false si son distintos resultado de tipo boolean palabra.length() entrega cantidad de caracteres del string resultado de tipo int

palabra.compareTo(mayor) compara Strings palabra y mayor devuelve 0 si palabra=mayor, Nº<0 si palabra<mayor, Nº>0 si palabra>mayor resultado de tipo int comparacion lexicográfica extensión de comparación alfabética (“diccionario”) para incluir otros caracteres orden:espacio<dígitos<mayúsculas<minúsculas otros caracteres con representaciones arbitrarias

Tipo char para caracteres individuales (letra, dígito, signo especial) cada caracter se representa en 16 bits (2 bytes) convención UNICODE (extensión de ASCII) variables: ej: char c; constantes: ‘un caracter’ (entre apóstrofes) ej: ‘ ‘, ’a’, ‘A’, ’8’, ’=’ asignación: ej: c=’a’; comparación: caracter operador-relación caracter orden entre caracteres: ‘ ‘ < ’0’ < ’1’ < ... < ’9’ < ’A’ < ... < ’Z’ < ’a’ < ... < ’z’ operaciones aritméticas (entre representaciones internas) ej: ‘c’-‘a’ entrega 2 (tipo int) (char)(‘a’+2) entrega ‘c’

Principales métodos de clase String Sintaxis Significado tipo Ej: String s=“casa” x.length( ) Nº de caracteres int s.length( )=4 x.equals(y) ¿ x es igual a y ? boolean s.equals(“casa”)=true s.equals(“Casa”)=false x.compareTo(y) 0 si x == y Nº < 0 si x < y Nº > 0 si x > y s.compareTo(“casa”)=0 s.compareTo(“casas”)<0 s.compareTo(“Casa”)>0 x.charAt(i) carácter ubicado en el indice i (desde 0) char s.charAt(2)=’s’ s.charAt(0)=’c’ s.charAt(4) error x.indexOf(y) índice de primer y en x (-1 si no está) s.indexOf(“as”)=1 s.indexOf(“a”)=1 s.indexOf(“hola”)=-1 x.indexOf(y,i) índice de y en x (a partir de i) s.indexOf(“a”,2)=3

Problema Contar las apariciones de un carácter en un string Ej: cuenta(‘a’,“abracadabra”) entrega 5 Solución static public int cuenta(char x,String y) { int n=0; for(int i=0; i<y.length(); ++i) if(y.charAt(i)== x) ++n; return n; }

Métodos que devuelven String (y no modifican string original) x.substring(i,j) string con caracteres entre índices i y j-1 s.substring(1,3) s.substring(2,3) “as” “s” x.substring(i) x.substring(i,x.length()) s.substring(1) “asa” x.concat(y) concatena x e y (añade y al final de x) s.concat(“do”) s + “do” “casado” x.replace(y,z) reemplaza todos los caracteres y por z s.replace(‘a’,’e’) “cese” x.toUpperCase() reemplaza minúsculas por mayúsculas s.toUpperCase() “CASA” x.toLowerCase() reemplaza mayúsculas por minúsculas s.toLowerCase() “casa” x.trim() elimina espacios al comienzo y fin “ a b “.trim() “a b”

Problema: Obtener una respuesta si o no String r; //respuesta while(true){ //r=U.readLine(“…”).trim().toLowerCase(); r = U.readLine(“si o no?”);//leer respuesta r = r.trim(); //eliminar espacios r = r.toLowerCase();//a minusculas if(r.equals(“si”)||r.equals(“no”))break; } if( r.equals(“si”) ) ... else ... o switch( r.charAt(0) ){//admite tipo char case ‘s’: ... case ‘n’: ...

Problema: contar las apariciones de un string en otro Ej: cuenta(“abra”,“abracadabra”) entrega 2 static public int cuenta(String x,String y) iterativa int n=0, l=x.length(); //repetir mientras se encuentre x for(int i=0; (i=y.indexOf(x,i))>=0; i+=l) ++n; return n; recursiva int i=y.indexOf(x); if(i<0) return 0; return 1+cuenta(x,y.substring(i+x.length()));

Ejercicio (10min) Escribir una función de encabezamiento static public String repetir(String x,int y) que repita un string una cantidad determinada de veces ejemplos: repetir(“ja”,3)entrega “jajaja” repetir(“a”,0) devuelve “”

Solución 1 (con iteración) String aux = “”; for(int i=1; i<=y; ++i)//repetir y veces aux = aux.concat(x); return aux; Nota. aux = aux.concat(x)se puede escribir aux = aux + x aux += x

Solución 2 (con recursión al final: tail recursion) if( y <= 0 ) return “”; else return x + repetir(x,y-1); con operador de exp condicional return y<=0 ? “”: x + repetir(x,y-1);

Solución 3 (con recursión al comienzo: head recursion) if( y <= 0 ) return “”; else return repetir(x,y-1) + x; con operador de exp condicional return y<=0 ? “”: repetir(x,y-1)+ x;

Conversión número <-> String Conversión de números a String Ejemplos: String s = “”+n; //si n=123, s=“123” String s = “”+x; //si x=4.5, s=“4.5” Conversión de Strings a números int n=Integer.parseInt(s); int n=new Integer(s).intValue(); //si s=”123”, n=123 double x=Double.parseDouble(s); double x=new Double(s).doubleValue(); //si s=”4.5”, x=4.5

Propuestos String inverso(String x) ej: inverso(“roma”) entrega “amor” String si_no()//leer y entregar un String “si” o “no” boolean palindrome(String x) Ej: palindrome(“reconocer”)=true boolean alfabetico(String x) Ej: alfabetico(“hola”)=true, alfabetico(“123”)=false boolean válido(String x,String y) Ej: válido(“123”,”0123456789”)=true String reemplazar(String x,String y,String z) ej: reemplazar(“abcde”,”bc”,”BC”)=“aBCde”