Le Stringhe. Usare la classe java.lang.string

Documenti analoghi
Metodi statici. Dichiarazione e chiamata di metodi statici

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Stringhe e Array. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Laboratorio di Programmazione Ottobre. Simone Zaccaria

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Costrutti iterativi. Utilizzo dei costrutti iterativi

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 16 Tipi riferimento e stringhe. Carla Limongelli.

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Iterazione. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E07. C. Limongelli Novembre 2007

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Le basi del linguaggio Java

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a. 2016/ Giugno 2017

Esempi di Problemi Iterativi

Insieme.java. Printed by Paolo. Feb 24, 04 16:44 Page 1/1 class Insieme { private int[] elementi; Tuesday February 24, /10

Fondamenti di Informatica T-1. Selezione Stringhe

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Esercizi sui metodi. Carla Limongelli. Maggio Esercizi 1

Esempi di Problemi Iterativi

Algoritmi di Ricerca. Esempi di programmi Java

Università degli studi di Bergamo. Informatica II. Programmazione Object Oriented Tutorato. Lezione 1. Dott. Marco Guarnieri Dott. Eros Magri

Algoritmi di Ricerca. Esempi di programmi Java

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a luglio 2011

Java Le stringhe. Stringhe

Richiami di Fondamenti di Informatica - 1

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

5 - Istruzioni condizionali

Fondamenti di informatica T-1 (A K) Esercitazione 2: Linguaggio Java, basi e controllo del flusso

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Espressioni. Operatori aritmetici e metodi della classe java.lang.math

Calcolare x n = x x x (n volte)

Corso di Laurea in Matematica Corso di Informatica Prova d Esame del 02/02/2010

Introduzione all uso degli oggetti in Java (parte II) Walter Didimo

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a luglio 2011

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Uguaglianza e copia di oggetti

Cognome Nome Matricola Postazione PC. Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a Gennaio 2015

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a febbraio 2013

Fondamenti di Informatica I

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Esercizi di preparazione Prima Parte

Basi della programmazione in Java. Anteprima. Uso delle variabili. Il concetto di variabile Uso delle variabili. Input da tastiera I tipi Esercizi

Iterazioni. L istruzione while. while (condition) istruzione

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2012

Fondamenti di Informatica L-B Esercitazione n 5 Java: Interfaccia Comparable, Array

Laboratorio di Matematica e Informatica 1

Programmazione in Java (I modulo)

Programmazione II Compitino (Vers. B)

Array di array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 03. A. Miola Febbraio 2008

Introduzione Programmazione Java

Fondamenti di Informatica T-1

La classe string. Tale classe evita agli utilizzatori tutte le problematiche di allocazione e de-allocazione dei buffer di caratteri

/***************************** FILE: Quiz.java *****************************/ public class Quiz { private String text; private int score;

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

Espressioni. Operatori aritmetici e metodi della classe java.lang.math

ESERCIZIO 1 (FILE DI TESTO)

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

Laboratorio di Programmazione Laurea in Bioinformatica

Informatica I. Ingegneria Medica. Prof. Diego Salamon

Dati aggregati. Violetta Lonati

Corso di Laurea Ingegneria Civile Elementi di Informatica. Esercizi. Carla Limongelli. Esercizi 1

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

n deve essere maggiore di 0, altrimenti il metodo restituisce null.

Codici a barre. Fondamenti di Informatica B

Programmazione ad oggetti

Algoritmi di Ricerca. Esempi di programmi Java

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Ricerca e ordinamento su array di oggetti. Corso di Programmazione 2 Esercitazione 5

Esercizi per la prova in itinere (con soluzioni)

Riferimenti ad oggetti: Fondamenti di Informatica L-B Esercitazione n 4 Java: I/O, Costruttori e altro. Riferimenti ad oggetti: (Esempio)

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

8 - Stringhe (e altre classi dalla Libreria Standard di Java)

Fondamenti di Informatica T-1 Modulo 2

Università degli Studi di Roma La Sapienza, Facoltà di Ingegneria. Corso di INGEGNERIA DEL SOFTWARE (Ing. Informatica, Nuovo Ordinamento)

MATLAB I/O. Informatica B - A.A. 2012/2013 ACQUISIZIONE DI INPUT DA TASTIERA

Esempio: Tombola! Vogliamo progettare una applicazione che realizza il gioco della tombola Versione semplificata: un banco, un

Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media.

Corso di Fondamenti di Informatica

Lezione 3 programmazione in Java

Uso di metodi statici. Walter Didimo

Laboratorio Progettazione Web Il linguaggio PHP Lezione 6. Andrea Marchetti IIT-CNR 2011/2012

Esercitazione n 2. Obiettivi

a.a Codice corso: 21012, 22010

Laboratorio di Programmazione. Programmini più complessi

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Dicembre 2001

Preparazione allo Scritto di Programmazione

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Unità B3 Strutture di controllo

Fondamenti di Informatica T-1 Modulo 2

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Decomposizione per scelta

Array Bidimensionali in Java. Esempi di Elaborazioni su Matrici

Laboratorio di Programmazione 1 [Java]

Transcript:

Le Stringhe Usare la classe java.lang.string

Classe java.lang.string (1/4) La classe String mette a disposizione dei metodi per effettuare operazioni su stringhe (sequenze di caratteri). Un oggetto di tipo String rappresenta una stringa di lunghezza arbitraria. Costruzione della stringa: String s = new String ("parola"); // tramite costruttore String t = "parola"; // tramite assegnamento di un literal

Classe java.lang.string (2/4) Alcuni metodi principali: length() ritorna la lunghezza (int) della stringa int l = s.length(); // l == 6 charat(int i) ritorna il carattere (char) nella posizione i-esima (il primo carattere occupa la posizione 0) char c = s.charat(2); // c == 'r' equals(string str) confronta la stringa con un altra stringa str e ritorna un valore boolean che vale true se le stringhe sono uguali o false altrimenti boolean e = s.equals(t); // e == true

Alcuni metodi utili: Classe java.lang.string (3/4) indexof(char c) ritorna l indice (int) della prima occorrenza del carattere c int i = s.indexof('a'); // i == 1 indexof(char c, int i) ritorna l indice (int) della prima occorrenza del carattere c partendo dalla posizione i-esima int i = s.indexof('a', 2); // i == 5 lastindexof(char c) ritorna l indice (int) dell ultima occorrenza del carattere c int i = s.lastindexof('a'); // i == 5 lastindexof(char c, int i) ritorna l indice (int) dell ultima occorrenza del carattere c partendo dalla posizione i-esima e cercando all indietro int i = s.lastindexof('a', 4); // i == 1

Classe java.lang.string (4/4) Alcuni metodi utili: substring(int i) ritorna la sotto-stringa partendo dalla posizione i-esima String ss = s.substring(3); // "ola" substring(int i, int j) ritorna la sotto-stringa partendo dalla posizione i-esima fino alla posizione (j-1)-esima. String ss = s.substring(2, 4); // "ro"

Concatenazione L operatore + applicato a due stringhe effettua la concatenazione. Ritorna quindi una terza stringa ottenuta unendo le due stringhe. String a = "ci"; String b = "ao"; String c = a + b; // "ciao" Se soltanto uno degli operandi dell operatore + è una stringa, l altro viene convertito in stringa. String a = "b vale "; int b = 10; String c = a + b; // "b vale 10" Attenzione alle precedenze degli operatori! String a = "b + c vale "; int b = 10; int c = 5; String d = a + b + c; // "b + c vale 105" String e = a + (b + c); // "b + c vale 15"

Uguaglianza tra stringhe Non utilizzare l operatore di confronto == per verificare l uguaglianza tra due stringhe, perché potrebbe dare risultati inaspettati. Utilizzare sempre il metodo equals() String a = "ciao"; String b = "ciao"; String c = new String("ciao"); if(a==b){ // true System.out.println("a==b"); if(a==c){ // false System.out.println("a==c"); if(a.equals(b)){ // true System.out.println("a equals b"); if(a.equals(c)){ // true System.out.println("a equals c");

Input di stringhe (1/2) La classe lettore della libreria fiji mette a disposizione i seguenti metodi per inserire stringhe: leggistring() Legge una stringa di caratteri. La stringa non deve contenere spazi. leggilinea() Legge un intera linea di testo fino alla pressione del tasto invio. Può contenere spazi.

Input di stringhe (2/2) La classe lettore grafico della libreria unipi mette a disposizione il seguente metodo per inserire stringhe: leggitesto(messaggio) Legge un intera linea di testo fino alla pressione del tasto invio. Può contenere spazi.

Esempio StringaNumerica Il programma legge una stringa da tastiera e controlla se il testo inserito è composto solo da numeri o se sono presenti anche delle lettere. Stampa a video il risultato, È un numero oppure Non è un numero.

Soluzione (1/2) import fiji.io.lettore; public class StringaNumerica { public static void main(string[] args) { System.out.println("Inserisci la stringa"); String txt = Lettore.in.leggiString(); int indice = 0; // indice del carattere in esame boolean numero = true; // contiene la risposta // Se il primo carattere è il segno, va tutto bene e // parto dal secondo valore. if(txt.charat(0) == '+' txt.charat(0) == '-'){ indice++;

Soluzione (2/2) // Scorro la stringa controllando la validità // di ogni carattere for(; indice < txt.length() && numero; indice++){ char c = txt.charat(indice); // I caratteri '0', '1',... '9' sono ordinati, // quindi per controllare che il carattere c non sia // una cifra si può usare (c<'0' c>'9') if(c<'0' c>'9'){ numero = false; if(numero){ System.out.println("È un numero"); else{ System.out.println("Non è un numero");

Esempio ConversioneData Il programma legge una stringa da tastiera interpretandola come una data nel formato GG/MM/AAAA, ne estrae i vari campi (giorno, mese ed anno) convertendoli in formato numerico ed infine stampa a video i risultati. Il mese viene stampato anche in formato testuale: 1 (Gennaio) - 2 (Febbraio) - 3 (Marzo) - 4 (Aprile) 5 (Maggio) - 6 (Giugno) - 7 (Luglio) - 8 (Agosto) 9 (Settembre) - 10 (Ottobre) - 11 (Novembre) 12 (Dicembre)

Soluzione (1/4) import unipi.io.*; public class ConversioneData { public static void main(string[] args) { // Input della Data nel formato GG/MM/AAAA String data = LettoreGr.in.leggiTesto( "Inserisci la data nel formato GG/MM/AAAA"); // Conversione Giorno int gg_idx = data.indexof('/'); String gg_str = data.substring(0, gg_idx); int gg = Integer.parseInt(gg_str); // Conversione Mese int mm_idx = data.lastindexof('/'); String mm_str = data.substring(gg_idx + 1, mm_idx); int mm = Integer.parseInt(mm_str);

// Conversione Mese Testuale String mm_c_str; switch (mm) { case 1: mm_c_str = "Gennaio"; break; case 2: mm_c_str = "Febbraio"; break; case 3: mm_c_str = "Marzo"; break; case 4: mm_c_str = "Aprile"; break; case 5: mm_c_str = "Maggio"; break; case 6: mm_c_str = "Giugno"; break; Soluzione (2/4)

case 7: mm_c_str = "Luglio"; break; case 8: mm_c_str = "Agosto"; break; case 9: mm_c_str = "Settembre"; break; case 10: mm_c_str = "Ottobre"; break; case 11: mm_c_str = "Novembre"; break; case 12: mm_c_str = "Dicembre"; break; default: mm_c_str = "caso non previsto"; Soluzione (3/4)

Soluzione (4/4) // Conversione Anno String aa_str = data.substring(mm_idx + 1); int aa = Integer.parseInt(aa_str); // Output dei dati estratti e convertiti. ScrittoreGr.out.scriviTesto( "Giorno: " + gg); ScrittoreGr.out.scriviTesto( "Mese: " + mm + " (" + mm_c_str + ")"); ScrittoreGr.out.scriviTesto( "Anno: " + aa);

Esercizio Uguali Scrivere un programma che legge due stringhe di uguale lunghezza da tastiera, le confronta carattere per carattere e mostra a video l'indice del primo carattere diverso, oppure l'indicazione che sono uguali. Nel caso le due stringhe siano di lunghezza diversa il programma deve indicarlo e terminare.

Soluzione (1/2) import fiji.io.lettore; public class Uguali { public static void main(string[] args) { System.out.println("Scrivi due righe di testo"); String str1 = Lettore.in.leggiLinea(); String str2 = Lettore.in.leggiLinea(); if(str1.length()!= str2.length()){ System.out.println("Lunghezza diversa, " + str1.length() + " e " + str2.length());

Soluzione (2/2) else{ boolean uguali = true; int i; for(i = 0; i < str1.length() && uguali ; i++){ if(str1.charat(i)!= str2.charat(i)){ uguali = false; if(uguali){ System.out.println("Le stringhe sono uguali"); else{ System.out.println("L indice del primo " + "carattere diverso è " + (i - 1));

Esercizio Palindromo Scrivere un programma che legge una stringa da tastiera e indica se la stringa inserita è palindroma, cioè se contiene la stessa sequenza di caratteri leggendola da destra e da sinistra. Metodi: Usando degli indici Creazione di una copia invertita della stringa Esempi di stringhe palindrome: anna itopinonavevanonipoti

import fiji.io.lettore; public class Palindromo { public static void main(string[] args) { System.out.println("Scrivi la stringa"); String str = Lettore.in.leggiLinea(); Metodo degli indici boolean palindromo = true; // indica se la stringa è palindroma int idxfw = 0; // indice per scorrere in avanti int idxbw = str.length()-1; // indice per scorrere indietro int estremo = str.length()/2; // numero confronti while(idxfw<estremo && palindromo){ palindromo = str.charat(idxfw) == str.charat(idxbw); idxfw++; idxbw--; if(palindromo){ System.out.println("La stringa è palindroma"); else{ System.out.println("La stringa non è palindroma");

import fiji.io.lettore; Metodo degli indici - Variante public class PalindromoVariante { public static void main(string[] args) { System.out.println("Scrivi la stringa"); String str = Lettore.in.leggiLinea(); boolean palindromo = true; for(int i=0; i<str.length()/2 && palindromo; i++){ if(str.charat(i)!= str.charat(str.length()-1-i)){ palindromo = false; if(palindromo){ System.out.println("La stringa è palindroma"); else{ System.out.println("La stringa non è palindroma");

Metodo della copia invertita import fiji.io.lettore; public class PalindromoMetodoCopia { public static void main(string[] args) { System.out.println("Scrivi la stringa"); String str = Lettore.in.leggiLinea(); String tmpstr = ""; // stringa che conterrà la copia invertita for (int i = 0; i<str.length(); i++) { tmpstr = str.charat(i) + tmpstr; if(str.equals(tmpstr)){ System.out.println("La stringa è palindroma"); else{ System.out.println("La stringa non è palindroma");

Esercizio Prefisso Scrivere un programma che legge due stringhe da tastiera (s e t) e dice se la stringa s inizia con la stringa t, cioè se t è un prefisso di s.

Soluzione import fiji.io.lettore; public class Prefisso { public static void main(string[] args) { System.out.println("Scrivi due stringhe"); String s = Lettore.in.leggiLinea(); String t = Lettore.in.leggiLinea(); boolean prefix = true; if(s.length() >= t.length()){ for (int i = 0; i < t.length() && prefix; i++){ if(s.charat(i)!= t.charat(i)){ prefix = false; else{ prefix = false; if(prefix){ System.out.println("La seconda stringa è un prefisso"); else{ System.out.println("La seconda stringa non è un prefisso");