Enlever les espaces au milieu d'un String

encours Messages postés 159 Statut Membre -  
encours Messages postés 159 Statut Membre -
Bonjour,


en java

je veux enlever les espaces au milieu du chiffre pour qu'il soit converti en double
j'ai essayé :
String r = monchiffre.replaceAll(" ",""); // erreur(il ne peut pas convertir : les espaces restent )
et aussi
String ch1 = "";
int l = monchiffre.length();
char c;
for(int i = 0 ; i < l ; i++){
c = ch.charAt(i);
if(c != ' '){ ch1 += c;}
} // aussi meme erreur (les espaces restent)
merci d'avance
A voir également:

3 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
Normalement replaceAll doit marcher, en fait cela dépend surtout du format de monchiffre...

public static void main(String...args)
{
	String
		s1 = "123 456 789.012",
		s2 = s1.replaceAll(" ","");
	
	Double d = Double.parseDouble(s2);
	
	System.out.println(d);
}
0
encours Messages postés 159 Statut Membre 1
 
d'abord merci pour l'intervention
j'ai essayé ce que tu as ecrit ca marché
mais pour mon cas malheureusement ca na pas marché (les espaces restent ) :
je pense c'est parsque monchiffre est retourné par cette methode

String de(double a ){
DecimalFormat df = new DecimalFormat("#,##0.00");
String dd = df.format(a);
String qs = dd.replace("," , ".");
return qs ;
}
et je peux pas l'annuler car je fais une application financiere ou je dois avoir cette facon d'ecriture
et l'espace generé par cette DecimalFormat est "particulier"
si tu as une idée ou quelqu'un d'autre merci bien de la partager
0
KX Messages postés 19031 Statut Modérateur 3 020
 
En fait c'est parce que Java utilise l'Unicode pour l'encodage des caractères.
Les espaces qui apparaissent avec ton DecimalFormat ce n'est pas l'espace traditionnel (un byte 32), mais une combinaison de bytes au format Unicode (-62 puis -96)

Il faudrait donc plutôt utiliser ce genre de transformation :

public static void main(String...args)
{	
	String s1 = de(1234567.89);
	System.out.println(s1);
	String s2 = s1.replaceAll(new String(new byte[] {-62,-96}), "");
	System.out.println(s2);
	Double d = Double.parseDouble(s2);
}
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Une alternative intéressante pourrait être de modifier légèrement ta méthode de, pour directement mettre des espaces classiques à la place des espaces par défaut (de même que tu l'as fait pour remplacer la virgule par le point)

static String de2(double d)
{
	DecimalFormat df = new DecimalFormat("#,##0.00");
	DecimalFormatSymbols dfs = df.getDecimalFormatSymbols();
	dfs.setDecimalSeparator('.');
	dfs.setGroupingSeparator(' ');
	df.setDecimalFormatSymbols(dfs);
	return df.format(d);
}

public static void main(String...args)
{
	String s1 = de2(1234567.89);		
	System.out.println(s1);
	
	String s2 = s1.replaceAll(" ", "");
	System.out.println(s2);
}
0
encours Messages postés 159 Statut Membre 1
 
merci bien KX cette de2 a bien marché
voici maitenant mes 2 methodes :
// pour le format
String de(double d ){

DecimalFormat df = new DecimalFormat("#,##0.00");
DecimalFormatSymbols dfs = df.getDecimalFormatSymbols();
dfs.setDecimalSeparator('.');
dfs.setGroupingSeparator(' ');
df.setDecimalFormatSymbols(dfs);
return df.format(d);
}

// pour avoir le double
double clc_de(String a ){

String f = a.replaceAll(" ","");
return Double.parseDouble(f);
}
0