PDA

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... :(

VICIUS
30-07-2005, 12:02
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.

Angus
01-08-2005, 10:50
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: