2014-10-22 13 views
7

Mi chiedo il motivo per cui Character.toUpperCase/toLowerCase non ha parametri Locale come String.toUpperCase/toLowerCase.Perché Java Character.toUpperCase/toLowerCase non ha parametri Locale come String.toUpperCase/toLowerCase

Devo prima di tutto il testo che può essere in qualsiasi lingua. Ho 2 soluzioni:

  1. Utilizzare Character.toUpperCase

    String text = "stack overflow"; 
    StringBuilder sb = new StringBuilder(text); 
    
    sb.setCharAt(0, Character.toUpperCase(sb.charAt(0))); // No Locale parameter here. 
    
    String out = sb.toString(); //Out: Stack overflow 
    
  2. Utilizzare String.toUpperCase

    Locale myLocale = new Locale(locateId); 
    
    String text = "stack overflow"; 
    String text1 = text.substring(0,1).toUpperCase(myLocale); 
    String text2 = text.substring(1); 
    
    String out = text1 + text2; // Out: Stack overflow 
    

Per il mio Locale. In entrambi i casi ha lo stesso risultato.

La mia domanda è:

  • Dal momento che il testo può essere in qualsiasi lingua. Quale modo dovrei usare?

  • Perché Character.toUpperCase/toLowerCase non ha parametri Locale perché non c'è molta differenza tra Character.toUpperCase/toLowerCase e String.toUpperCase/toLowerCase perché String è una matrice di Caratteri.

+1

Si noti che javadoc suggerisce di utilizzare la versione di 'String' per i mapping sensibili delle impostazioni internazionali. –

risposta

2

Dal Character#toUpperCase(int) Javadoc,

In generale, String.toUpperCase() dovrebbero essere utilizzati per mappare i caratteri in maiuscolo. I metodi di mappatura dei casi con String presentano numerosi vantaggi rispetto ai metodi di mappatura dei casi Character. I metodi di mappatura dei casi String possono eseguire mappature sensibili alle impostazioni internazionali, mapping sensibili al contesto e mappature dei caratteri 1: M, mentre i metodi di mappatura dei casi Character non possono.

Quindi, la risposta è il vostro secondo esempio (String.toUpperCase)

+0

mi ha battuto di 6 secondi! – dkatzel

+0

Quindi non dovrei usare Character.toUpperCase/toLowerCase poiché il mio testo può essere in qualsiasi lingua. Grazie! – Loc

+0

Grazie !!!!!! – Loc

4

Come Javadoc dice:

In generale, String.toUpperCase() deve essere utilizzato per mappare i caratteri in maiuscolo . I metodi di mappatura delle maiuscole hanno numerosi vantaggi rispetto ai metodi di mappatura dei casi di caratteri. I metodi di mappatura delle maiuscole/minuscole possono eseguire mappature sensibili alle impostazioni internazionali, mappature sensibili al contesto e mappature dei caratteri 1: M, mentre i metodi di mappatura dei casi di caratteri non possono.

Quindi utilizzare String.toUpperCase()

+0

Grazie. Ho votato! – Loc

1

Se la domanda è "quale metodo dovrei usare", allora questa domanda è un duplicato di String conversion to Title Case e la risposta corretta è o

Se la domanda è "perché non Character avere metodi che cambia caso locale-sensibili", quindi l'unico modo è molto probabile che per ottenere una risposta è quello di consultare uno dei progettisti del linguaggio Java. È improbabile che la community di Overflow dello stack possa darti la risposta che desideri.

+0

In realtà. Ho 2 sotto-domande come sai. Quale modo di usare - ho la risposta di Elliott Frisch e dkatzel. Un'altra domanda sul perché Character.toUpperCase/toLowerCase non ha parametri Locale - Lo chiedo perché forse c'è un altro motivo per cui Locale non è necessario. – Loc

+0

Sì, quella "altra domanda" è ciò che il mio ultimo paragrafo affronta. In futuro però, se hai due domande, dovresti fare due domande. Rende più facile accettare una risposta, se le risposte diverse sono "migliori" per ogni sottocomponente. –

+0

Definitivamente Locale è necessario per cambiare il caso di un singolo carattere. Ad esempio, il risultato della conversione di 'i' in maiuscolo è diverso tra inglese e turco. –

Problemi correlati