Enlever les espaces au milieu d'un String

Fermé
encours Messages postés 121 Date d'inscription mercredi 3 août 2011 Statut Membre Dernière intervention 31 mars 2014 - Modifié par encours le 9/08/2011 à 19:33
encours Messages postés 121 Date d'inscription mercredi 3 août 2011 Statut Membre Dernière intervention 31 mars 2014 - 10 août 2011 à 11:19
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

3 réponses

KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 004
9 août 2011 à 19:54
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 121 Date d'inscription mercredi 3 août 2011 Statut Membre Dernière intervention 31 mars 2014 1
9 août 2011 à 22:15
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 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 004
9 août 2011 à 22:40
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 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 004
Modifié par KX le 9/08/2011 à 23:28
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 121 Date d'inscription mercredi 3 août 2011 Statut Membre Dernière intervention 31 mars 2014 1
10 août 2011 à 11:19
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