Pages: [1]   Go Down
Print
Author Topic: Dubbi Metodi Classe String  (Read 1636 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« on: 13-12-2010, 12:46:00 »

Buongiorno!  

Ho dato un'ultima ripassata ai metodi della classe String, prima della prova di giovedì. Ho compreso la maggior parte di questi metodi, di alcuni,invece, non capisco perfettamente il funzionamento  boh



compareTo

int x=s.compareTo(s1);

Compara la stringa s con la stringa s1 :

se  s<s1  ---->  x<0
se  s=s1 ----->  x=0
se  s>s1 ----->  x>0

Esempio 1:

String s="aaa"; String s1="a";  risultato ----> x=2   (che dovrebbe essere la differenza s-s1);

Esempio 2:

String s="bbb"; String s1="a";  risultato ----> x=1  why??  testate  

Forse quando tutti i caratteri di s sono uguali a tutti i caratteri di s1 restituisce la differenza
(NumeroCaratteri di s - NumeroCaratteri di s1),   mentre quando sono diversi fa semplicemente il primo carattere di s meno il primo di s1??   b-a=1

O probabilmente non centra nulla quello che sto dicendo  testate




indexOf

int x=s.indexOf(s1, int fromIndex);

Mi è chiara la versione che prende come parametro formale un char e quello che prende come paramentro formale una stringa, ma non ho ben compreso l'utilità dell'intero formIndex   [Emoticon] Asd




replace

String r=s.replace(char old, char new);

Quote
Restituisce una nuova stringa risultante dalla sostituzione di tutte le occorrenze di oldChar in questa stringa con newChar.

Cioè?    
Logged

"Quando non stai guardando è come un'onda. Quando guardi è come una particella!"
KingDavid
Forumista
***
Offline Offline

Posts: 788


Alla fine [...] tutta la realtà è binaria.


« Reply #1 on: 13-12-2010, 13:08:05 »

compareTo

Quote
int x=s.compareTo(s1);

Compara la stringa s con la stringa s1 :

se  s<s1  ---->  x<0
se  s=s1 ----->  x=0
se  s>s1 ----->  x>0

Esempio 1:

String s="aaa"; String s1="a";  risultato ----> x=2   (che dovrebbe essere la differenza s-s1);

Esempio 2:

String s="bbb"; String s1="a";  risultato ----> x=1  why??  testate  

Forse quando tutti i caratteri di s sono uguali a tutti i caratteri di s1 restituisce la differenza
(NumeroCaratteri di s - NumeroCaratteri di s1),   mentre quando sono diversi fa semplicemente il primo carattere di s meno il primo di s1??   b-a=1

O probabilmente non centra nulla quello che sto dicendo  testate
Ti rimando alla documentazione ufficiale:
Quote

compareTo
public int compareTo(String anotherString)Compares two strings lexicographically. The comparison is based on the Unicode value of each character in the strings. The character sequence represented by this String object is compared lexicographically to the character sequence represented by the argument string. The result is a negative integer if this String object lexicographically precedes the argument string. The result is a positive integer if this String object lexicographically follows the argument string. The result is zero if the strings are equal; compareTo returns 0 exactly when the equals(Object) method would return true.
This is the definition of lexicographic ordering. If two strings are different, then either they have different characters at some index that is a valid index for both strings, or their lengths are different, or both. If they have different characters at one or more index positions, let k be the smallest such index; then the string whose character at position k has the smaller value, as determined by using the < operator, lexicographically precedes the other string. In this case, compareTo returns the difference of the two character values at position k in the two string -- that is, the value:

 this.charAt(k)-anotherString.charAt(k)
 If there is no index position at which they differ, then the shorter string lexicographically precedes the longer string. In this case, compareTo returns the difference of the lengths of the strings -- that is, the value:

Il metodo compareTo della classe String si comporta in modo differente in base alle stringhe che si stanno confrontando.

Nel secondo esempio viene confrontanto il primo carattere della string "bbb" ovvero b con il primo (e unico carattere) della stringa "a" ovvero a. Poichè viene fatta la differenza tra il codice unicode di a e di b (che differiscono di uno) allora viene restituito b-a = 1

Nel primo esempio si fa la differenza del primo carattere delle due stringhe (che è uguale e quindi la differenza =0).
Poichè, a differenza del secondo esempio, confrontando solo il primo carattere non si è potuto determinare quale stringa sia maggiore e poichè la prima stringa possiede altri carratteri allora viene restituita la differenza di lunghezza (che è appunto 2).
E che determina che la prima stringa ("aaa") è maggiore della seconda ("a");




indexOf

Quote
int x=s.indexOf(s1, int fromIndex);

Mi è chiara la versione che prende come parametro formale un char e quello che prende come paramentro formale una stringa, ma non ho ben compreso l'utilità dell'intero formIndex   [Emoticon] Asd
L' indice ti permette di applicare il metodo ad una sottostringa di quella originale;
Se hai str = "ciaociao";
allora s.indexOf("c"); restituisce 0
mentre s.indexOf("c",1) restituisce 4
perchè in questo modo viene escluso il primo carattere della stringa.
Infatti il nome del parametro "fromIndex" suggerisce che si comincia proprio da fromIndex


replace

String r=s.replace(char old, char new);

Quote
Restituisce una nuova stringa risultante dalla sostituzione di tutte le occorrenze di oldChar in questa stringa con newChar.

Cioè?    

Se hai una stringa str = "abba"; e fai str = str.replace("b", "a");
allora str = "aaaa";
Infatti come suggeriscono i nomi l' old char (il primo argomento) verrà sostituito con il new char(il secondo argomento)
« Last Edit: 13-12-2010, 13:32:16 by KingDavid » Logged

Basti pensare che un ipotetico quadrato di specchi, lungo 200 chilometri per ogni lato, potrebbe produrre tutta l'energia necessaria all'intero pianeta.
(Carlo Rubbia)
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« Reply #2 on: 13-12-2010, 15:38:55 »

Quote
Il metodo compareTo della classe String si comporta in modo differente in base alle stringhe che si stanno confrontando.

Nel secondo esempio viene confrontanto il primo carattere della string "bbb" ovvero b con il primo (e unico carattere) della stringa "a" ovvero a. Poichè viene fatta la differenza tra il codice unicode di a e di b (che differiscono di uno) allora viene restituito b-a = 1

Nel primo esempio si fa la differenza del primo carattere delle due stringhe (che è uguale e quindi la differenza =0).
Poichè, a differenza del secondo esempio, confrontando solo il primo carattere non si è potuto determinare quale stringa sia maggiore e poichè la prima stringa possiede altri carratteri allora viene restituita la differenza di lunghezza (che è appunto 2).
E che determina che la prima stringa ("aaa") è maggiore della seconda ("a");

In pratica il metodo compareTo sottrae il codice unicode del primo carattere della prima stringa al codice unicode del primo carattere della seconda stringa?   


Quote
L' indice ti permette di applicare il metodo ad una sottostringa di quella originale;
Se hai str = "ciaociao";
allora s.indexOf("c"); restituisce 0

questo perchè la prima c si trova all'indice 0?? 

Quote
mentre s.indexOf("c",1) restituisce 4
perchè in questo modo viene escluso il primo carattere della stringa.
Infatti il nome del parametro "fromIndex" suggerisce che si comincia proprio da fromIndex

questo perchè sta saltando la "c" di indice 0 e la prima c che trova è all'indice 4   
Logged

"Quando non stai guardando è come un'onda. Quando guardi è come una particella!"
KingDavid
Forumista
***
Offline Offline

Posts: 788


Alla fine [...] tutta la realtà è binaria.


« Reply #3 on: 13-12-2010, 16:56:54 »

Quote
Il metodo compareTo della classe String si comporta in modo differente in base alle stringhe che si stanno confrontando.

Nel secondo esempio viene confrontanto il primo carattere della string "bbb" ovvero b con il primo (e unico carattere) della stringa "a" ovvero a. Poichè viene fatta la differenza tra il codice unicode di a e di b (che differiscono di uno) allora viene restituito b-a = 1

Nel primo esempio si fa la differenza del primo carattere delle due stringhe (che è uguale e quindi la differenza =0).
Poichè, a differenza del secondo esempio, confrontando solo il primo carattere non si è potuto determinare quale stringa sia maggiore e poichè la prima stringa possiede altri carratteri allora viene restituita la differenza di lunghezza (che è appunto 2).
E che determina che la prima stringa ("aaa") è maggiore della seconda ("a");

In pratica il metodo compareTo sottrae il codice unicode del primo carattere della prima stringa al codice unicode del primo carattere della seconda stringa?   

Si


Quote
L' indice ti permette di applicare il metodo ad una sottostringa di quella originale;
Se hai str = "ciaociao";
allora s.indexOf("c"); restituisce 0

questo perchè la prima c si trova all'indice 0?? 
Si (si tratta di un esempio)


Quote
mentre s.indexOf("c",1) restituisce 4
perchè in questo modo viene escluso il primo carattere della stringa.
Infatti il nome del parametro "fromIndex" suggerisce che si comincia proprio da fromIndex

questo perchè sta saltando la "c" di indice 0 e la prima c che trova è all'indice 4   
Ni
Più che saltare sta applicando il metodo alla sottostringa che comincia dall'indice (1 in questo) caso.
Logged

Basti pensare che un ipotetico quadrato di specchi, lungo 200 chilometri per ogni lato, potrebbe produrre tutta l'energia necessaria all'intero pianeta.
(Carlo Rubbia)
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #4 on: 14-12-2010, 01:27:27 »

Vi siete ingarbugliati con i QUOTE testate!

questo perchè sta saltando la "c" di indice 0 e la prima c che trova è all'indice 4   
Ni
Più che saltare sta applicando il metodo alla sottostringa che comincia dall'indice (1 in questo) caso.
Applicando il metodo alla sottostringa che comincia dall'indice 1 avrebbe dovuto far restituire 3, invece il metodo ha proprio "saltato" tutte le eventuali occorrenze di 'c' fino all'indice 1-1=0 compreso (cioè saltando solo l'eventuale 'c' presente nel primissimo carattere, che puntualmente c'è ).
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
KingDavid
Forumista
***
Offline Offline

Posts: 788


Alla fine [...] tutta la realtà è binaria.


« Reply #5 on: 14-12-2010, 09:42:01 »

Vi siete ingarbugliati con i QUOTE testate!

questo perchè sta saltando la "c" di indice 0 e la prima c che trova è all'indice 4   
Ni
Più che saltare sta applicando il metodo alla sottostringa che comincia dall'indice (1 in questo) caso.
Applicando il metodo alla sottostringa che comincia dall'indice 1 avrebbe dovuto far restituire 3, invece il metodo ha proprio "saltato" tutte le eventuali occorrenze di 'c' fino all'indice 1-1=0 compreso (cioè saltando solo l'eventuale 'c' presente nel primissimo carattere, che puntualmente c'è ).
Appunto,

il metodo (che è una banale ricerca) viene applicato alla sottostringa però per quanto riguarda il conteggio degli indici rimane quello della stringa originale. Il che mi sembra ovvio altrimenti non sarebbe esistito il metodo che prende in input anche il secondo parametro no? 
Logged

Basti pensare che un ipotetico quadrato di specchi, lungo 200 chilometri per ogni lato, potrebbe produrre tutta l'energia necessaria all'intero pianeta.
(Carlo Rubbia)
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #6 on: 14-12-2010, 11:57:42 »

Bravo. Mancava solo questa importante precisazione sul conteggio univ!
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
KingDavid
Forumista
***
Offline Offline

Posts: 788


Alla fine [...] tutta la realtà è binaria.


« Reply #7 on: 14-12-2010, 12:09:38 »

Bravo. Mancava solo questa importante precisazione sul conteggio univ!

Grazie  univ
Logged

Basti pensare che un ipotetico quadrato di specchi, lungo 200 chilometri per ogni lato, potrebbe produrre tutta l'energia necessaria all'intero pianeta.
(Carlo Rubbia)
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« Reply #8 on: 15-12-2010, 21:20:08 »

Che differenza c'è tra il metodo copyValueOf() e il metodo valueOf()  ?

Se volessi convertire un array di char in stringa ho notato che funzionano entrambi...

Ci sono differenze?   boh
Logged

"Quando non stai guardando è come un'onda. Quando guardi è come una particella!"
KingDavid
Forumista
***
Offline Offline

Posts: 788


Alla fine [...] tutta la realtà è binaria.


« Reply #9 on: 16-12-2010, 09:39:58 »

Che differenza c'è tra il metodo copyValueOf() e il metodo valueOf()  ?

Se volessi convertire un array di char in stringa ho notato che funzionano entrambi...

Ci sono differenze?   boh

Basta leggere la documentazione.

In particolare noterai che copyValueOf() prende in input un array di char mentre valueOf() prende in input diversi tipi di dati (compresi char e array di char).

Nel caso in cui in input vi è un array di char allora il risultato è identico.
L'algoritmo probabilmente no, per verifcare se vi sono differenze di performance puoi eseguire entrambi i metodi sullo stesso array di char in input e verificare quale sia quello che viene eseguito nel tempo minore.
Logged

Basti pensare che un ipotetico quadrato di specchi, lungo 200 chilometri per ogni lato, potrebbe produrre tutta l'energia necessaria all'intero pianeta.
(Carlo Rubbia)
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #10 on: 16-12-2010, 17:04:32 »

Che differenza c'è tra il metodo copyValueOf() e il metodo valueOf()  ?

Se volessi convertire un array di char in stringa ho notato che funzionano entrambi...

Ci sono differenze?   boh
L'unica differenza che noto dalla documentazione ufficiale rispetto alla versione che accetta come argomento un array di char e due interi, è che una può lanciare un eccezione tipica di quando si sforano gli array mentre a quanto pare l'altra no...
ma sono troppo pigro oggi per testare i casi estremi e dirlo con certezza empirica boh...
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Pages: [1]   Go Up
Print
Jump to: