Enlever les espaces au milieu d'un String

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

  1. Modérateur
    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
    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
      1. Modérateur
        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
      2. Modérateur
        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
    2. 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