View Full Version : [Java] Generare numeri a partire da stringhe
Ed_Bunker
30-07-2005, 02:41
Ciao, dato un insieme di stringhe (Quindi tutte tra loro differenti) avrei bisogno di assegnare a ciascuna di essa un intero che la identifichi.
Facendo in questo modo:
...
Byte toConvert = new Byte(stringa);
int ide = toConvert.intValue();
...
otterrei un intero differente per ciascuna stringa oppure correrei il rischio che eventuali cast "nascosti" possano portare ad uno stesso intero associato a stringhe diverse ??
thks
franksisca
30-07-2005, 08:13
guarda, se ti serve un intero per identificare univocamente le stringhe potresti usare il codice hash, che molto raramente è uguale per due stringhe.Altrimenti ti inventi tu una nuova funzione hash.
come fai tu se trovi due stringhe tipo "anna" e "nana" credo che ti restituisca lo stesso numero intero, se non ricordo male.......
Ed_Bunker
30-07-2005, 10:13
guarda, se ti serve un intero per identificare univocamente le stringhe potresti usare il codice hash, che molto raramente è uguale per due stringhe.Altrimenti ti inventi tu una nuova funzione hash.
come fai tu se trovi due stringhe tipo "anna" e "nana" credo che ti restituisca lo stesso numero intero, se non ricordo male.......
Ci avevo pensato ma quel "raramente" mi crea qualche problema... :D
Adesso faccio qualche prova.
Ed_Bunker
30-07-2005, 10:44
Temo che non sia possibile fare come avevo in mente.
Viene lanciata una NumberFormatException durante il "processo" di conversione tra tipi... :(
Ci avevo pensato ma quel "raramente" mi crea qualche problema... :D
Adesso faccio qualche prova.
Quel raramente dipende dalla funzione di hashing usata. La probabilita di collisioni tra due stringhe puo essere 1/4 per funzioni semplicissime come 1/2^1024 per quelle piu complesse.
Ed_Bunker
30-07-2005, 12:24
Quel raramente dipende dalla funzione di hashing usata. La probabilita di collisioni tra due stringhe puo essere 1/4 per funzioni semplicissime come 1/2^1024 per quelle piu complesse.
Il metodo hashCode() di String calcola l'hash in questo modo:
String s = ...;
int hashCode = s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1];
Ad ogni modo credo che faro' qualcosa di piu' "classico" che mi eviti di dover controllare se il valore ottenuto e' davvero univoco.
Temo che non sia possibile fare come avevo in mente.
Viene lanciata una NumberFormatException durante il "processo" di conversione tra tipi... :(
public Byte(String s) ti costruisce un byte partendo dalla sua rappresentazione decimale, quindi sono ammesse solo le stringhe che contengono i caratteri che rappresentano cifre.
Ed_Bunker
01-08-2005, 11:17
public Byte(String s) ti costruisce un byte partendo dalla sua rappresentazione decimale, quindi sono ammesse solo le stringhe che contengono i caratteri che rappresentano cifre.
Gia'... Sigh... :cry:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.