Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    standardizzare nomi città

    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

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: standardizzare nomi città

    Originariamente inviato da -plume83-
    devo standardizzare nomi in questo modo:

    Milan diventa Milano,
    Venice diventa Venezia,
    ecc..
    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-
    ho provato la strada degli switch ma ho difficoltà..
    L'istruzione switch non è utilizzabile con String.

    La cosa più banale è la "catena" di if che usano equals() per il test.

    codice:
    if ("Milan".equals(tuaStr)) {
        tuaStr = "Milano";
    } else if ("Venice".equals(tuaStr)) {
        tuaStr = "Venezia";
    }
    ecc...
    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    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',...:

    Codice PHP:
    java.util.Hashtable<String,StringcitiesMap = new java.util.Hashtable<String,String>(); 
    citiesMap.put("Milan""Milano");         
    citiesMap.put("Venice""Venezia"); 
    .... 
    in seguito puoi ricavare i valori che ti interessano con il metodo Hashtable.get("Milan");

    Codice PHP:
    String milanStandardString citiesMap.get("Milan"); 
    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.

    Ciao.

  4. #4
    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

  5. #5
    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

  6. #6
    come faccio a verificare che se citiesMap.get(city) restituisce null ??
    Puoi verificare preventivamente che citiesMap contenga la key city, con il metodo di Hashtable .containsKey("") .

    Codice PHP:
    Hashtable<StringStringcitiesMap=...;    
    String city "Milan";     
    if(
    citiesMap.containsKey(city)){             
         
    String string citiesMap.get(city);             
         ....         

    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.

    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:

    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));         
        }

    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:
    Milan Milano 
    Venice 
    Venezia 
    Rome 
    Roma 
    ....
    goodmorning buon giorno 
    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.

  7. #7
    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

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    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 plume
    Tutte? VVoVe:
    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

  9. #9
    io ne ho trovate al massimo una decina
    non dirmi che ce ne sono di più :O la mia fonte è il dizionario ita-en

  10. #10
    Originariamente inviato da -plume83-
    la soluzione da te proposta è fantastica !! però avevo ho bisogno di un dizionario e la prima soluzione è la migliore..
    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.

    Codice PHP:
    ResourceBundle rb ResourceBundle.getBundle("languages.lang"Locale.ITALY);
    String city "Milan";              
    if(
    rb.containsKey(city)){                           
        
    String string rb.getString(city);              
        ...         

    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), 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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.