2015-11-03 16 views
5

Se si converte un numero in locale francese/francese, è necessario utilizzare lo spazio come separatore delle migliaia. Se provo a sostituire gli spazi con altri caratteri, non trova spazio.Java FRANCE/FRENCH Il separatore delle migliaia di impostazioni internazionali assomiglia allo spazio ma non in realtà

String input = NumberFormat.getNumberInstance(Locale.FRANCE).format(123123123); 
System.out.println("String after conversion in locale "+input); 
input = input.replace(" ", "."); 
System.out.println("After replace space with dot  "+input); 

USCITA

String after conversion in locale 123 123 123 
After replace space with dot  123 123 123 

Quindi, anche se si presenta come separatore spazio è qualcosa di diverso. Qual è il carattere esatto? Come posso specificare quel carattere in input.replace() in modo che possa sostituirlo con punto?

+2

Perché non istituire un numero formattatore che utilizza un punto? –

+0

@mlk il mio codice riceve una stringa formattata FRANCE. Voglio convertirlo. Quindi questo codice è solo mostrare tutto il flusso. –

+1

Sarei molto tentato di convertirlo in un numero (dato che questo è quello con cui stai lavorando) quindi convertirlo in una stringa nel formato che desideri invece di manipolare le stringhe. Sembra troppo vicino al pattern anti di usare le stringhe quando gli oggetti avrebbero più senso. –

risposta

1

Come suggerito da Joop Eggen nella sua risposta è \u00a0 lo spazio non-breaking.

Come un lavoro in giro, ho avuto il separatore delle migliaia come segue

String input = NumberFormat.getNumberInstance(Locale.FRANCE).format(123123123); 
System.out.println("String after conversion in locale "+input); 

DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(Locale.FRANCE); 
DecimalFormatSymbols symbols = df.getDecimalFormatSymbols(); 
char thousandSep = symbols.getGroupingSeparator(); 

input = input.replace(thousandSep, '.'); 

Ha funzionato come previsto

String after conversion in locale 123 123 123 
After replace space with dot  123.123.123 
8

È lo spazio non interrompibile \u00a0, che ha senso per un importo. (Immagina 40 € alla fine di una riga e il successivo che inizia con 000.) Lo stesso vale per alcune altre lingue.

input = input.replace('\u00a0', '.');