ciao,
ho questa esigenza:
devo standardizzare nomi in questo modo:
Milan diventa Milano,
Venice diventa Venezia,
ecc..
ho provato la strada degli switch ma ho difficoltà..
mi sapete aiutare ???
magari con qualche esempio ??
ciao e grazie
ciao,
ho questa esigenza:
devo standardizzare nomi in questo modo:
Milan diventa Milano,
Venice diventa Venezia,
ecc..
ho provato la strada degli switch ma ho difficoltà..
mi sapete aiutare ???
magari con qualche esempio ??
ciao e grazie
Beh ma ... bisogna vedere quanti ne hai .... dove li hai (devi "cablarli" nel sorgente? O devi caricarli da un file?) .... come/quanto devi usarli.Originariamente inviato da -plume83-
devo standardizzare nomi in questo modo:
Milan diventa Milano,
Venice diventa Venezia,
ecc..
L'istruzione switch non è utilizzabile con String.Originariamente inviato da -plume83-
ho provato la strada degli switch ma ho difficoltà..
La cosa più banale è la "catena" di if che usano equals() per il test.
ecc...codice:if ("Milan".equals(tuaStr)) { tuaStr = "Milano"; } else if ("Venice".equals(tuaStr)) { tuaStr = "Venezia"; }
Che potrebbe andare bene per pochi casi, altrimenti diventa: a) brutto b) poco manutenibile c) lento.
E torniamo alla mia risposta di prima: devi specificare meglio il contesto.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Una soluzione sbrigativa potrebbe essere quella di memorizzare i dati in un Hashtable<String,String>, in cui le chiavi sarebbero 'Milan', 'Venice', ... e i valori rispettivamente 'Milano', 'Venezia',...:
in seguito puoi ricavare i valori che ti interessano con il metodo Hashtable.get("Milan");Codice PHP:
java.util.Hashtable<String,String> citiesMap = new java.util.Hashtable<String,String>();
citiesMap.put("Milan", "Milano");
citiesMap.put("Venice", "Venezia");
....
Se vuoi usare meccanismi più complessi, ma anche estensibili (per esempio aggiungere facilmente nuove lingue alla tua applicazione), poi usare le funzionalita messe a disposizione da java.util.Properties o meglio ancora java.util.ResourceBundle, dando un occhio anche alla classe java.util.Locale.Codice PHP:
String milanStandardString = citiesMap.get("Milan");
Ciao.
in pratica vorrei inserire tutte le città con nome inglese e relative traduzioni. e nel caso me ne dimenticassi una fosse semplice inserirne di nuove. quindi la soluzione che cerco è qualcosa di flessibile. se invece la città non è in elenco me la restituisce chiaramente senza traduzione.
ciao plume
ho una domanda e non apro un altro topic per non dare fastidio.
come faccio a verificare che se citiesMap.get(city) restituisce null ??
citiesMap.get(city).equals(null) non va come citiesMap.get(city) == null. mi date una mano
ciao plume
Puoi verificare preventivamente che citiesMap contenga la key city, con il metodo di Hashtable .containsKey("") .come faccio a verificare che se citiesMap.get(city) restituisce null ??
Io ti consiglierei, come approccio generale, di dare un'occhiata veloce a tutti i metodi messi a di sposizione da una classe, soprattutto quando è la prima volta che la usi; si trova la soluzione a gran parte dei problemi che si possano incontrare.Codice PHP:
Hashtable<String, String> citiesMap=...;
String city = "Milan";
if(citiesMap.containsKey(city)){
String string = citiesMap.get(city);
....
}
Ad ogni modo in questo contesto io userei le funzionalità messe a disposizione da ResourceBoundle che potrebbe essere molto utile, per esempio, se dovessi trovarti a sviluppare applicazioni web in cui le parole visualizzate in una pagina vengano tradotte in base alla lingua impostata per il browser. Posto un codice d'esempio di utilizzo di ResourceBoundle:
Per farlo funzionare correttamente basta aggiungere una cartella 'languages' nella root dell'applicazione java. In questa sottocartella sarà poi necessario aggiungere dei semplici file di testo il cui nome sia del tipo "lang_xx_XX" e che abbiano estensione ".properties", uno per ogni lingua che si vuole tradurre, per esempio languages/lang_it_IT.properties per la lingua italiana, languages/lang_fr_FR.properties per il francese, ... . Il file languages/lang.properties è un file di default, diciamo cosi, che restituisce una traduzione se per una lingua non è stata definita la traduzione per un determinato termine, oppure se una lingua non è definita. Il file languages/lang_it_IT.properties sarà del seguente tipo:Codice PHP:
public static void main(String[] args) {
//'languages' e 'lang' sono customizzabili
ResourceBundle rb = ResourceBundle.getBundle("languages.lang", Locale.ITALY);
translate(rb);
rb = ResourceBundle.getBundle("languages.lang", Locale.FRANCE);
translate(rb);
}
public static void translate(ResourceBundle rb) {
Locale locale = rb.getLocale();
System.out.println("Traduzioni nella lingua: " + locale.getDisplayLanguage());
Enumeration keyEnum = rb.getKeys();
while (keyEnum.hasMoreElements()) {
String currentKey = (String) keyEnum.nextElement();
System.out.println(currentKey + " -> " + rb.getString(currentKey));
}
}
Uno dei vantaggi, rispetto all'uso del Hashtable è che se vuoi aggiungere una nuova lingua, per esempio lo spagnolo, ti basta aggiungere un altro file languages/lang_es_ES.properties traducendo opportunamente le citta, senza modificare il codice della tua classe.Codice PHP:
Milan = Milano
Venice = Venezia
Rome = Roma
....
goodmorning = buon giorno
la soluzione da te proposta è fantastica !! però avevo ho bisogno di un dizionario e la prima soluzione è la migliore.. almeno credo
grazie mille
ciao plume
Tutte?Originariamente inviato da -plume83-
in pratica vorrei inserire tutte le città con nome inglese e relative traduzioni. e nel caso me ne dimenticassi una fosse semplice inserirne di nuove. quindi la soluzione che cerco è qualcosa di flessibile. se invece la città non è in elenco me la restituisce chiaramente senza traduzione.
ciao plumeVVoVe:
Hai provato a vedere se esiste qualche database del genere già pronto?
SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
Di questo libro e degli altri (blog personale di recensioni libri) | NO M.P. TECNICI
io ne ho trovate al massimo una decina
non dirmi che ce ne sono di più :O la mia fonte è il dizionario ita-en
Considerando la tua risposta, credo che l'esempio di utilizzo di ResourceBoundle che ho fatto non sia stato abbastanza chiaro. Lo riscrivo in modo più comprensibile.Originariamente inviato da -plume83-
la soluzione da te proposta è fantastica !! però avevo ho bisogno di un dizionario e la prima soluzione è la migliore..
come puoi vedere usando il ResourceBoundle l'inserimento dei valori nell'Hashtable delle varie citta viene sostituito con una sola istruzione (ResourceBundle rb = ResourceBundle.getBundle("languages.lang", Locale.ITALY)Codice PHP:
ResourceBundle rb = ResourceBundle.getBundle("languages.lang", Locale.ITALY);
String city = "Milan";
if(rb.containsKey(city)){
String string = rb.getString(city);
...
}
, non devi piu scrivere una "put" per ogni città. Ma il vantaggio principale di questo approccio è che se vuoi inserire una nuova città devi modificare solo il file .properties, e non ricompilare la classe (operazione necessaria se usi l Hashtable). Poi se le città sono poche e prevedi di non aggiungerne di nuove, conviene "cablarli" nel sorgente, usando una struttura dati come l Hashtable. Se le città sono molte, se prevedi di definire la traduzione per nuove lingue e cerchi una soluzione più flessibile ti conviene caricarle da un file e usare ResourceBoundle.
Ciao.