Supprimer les espaces dans un String

Résolu
talbsbast Messages postés 53 Date d'inscription   Statut Membre Dernière intervention   -  
walidovich_85 Messages postés 608 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'ai créé la méthode suivante :

public static long StoL(String s){
  if(s.equals("")) return 0;
  long l;
  String nb = s.replace(" ", "");
  System.out.println(nb);
  l = Long.valueOf(nb);
  
  return l;
 }

qui a pour but de transformer une chaîne de caractères qui contient que des chiffres et des espaces (par ex: "12 321") en un long
du coup afin de pouvoir utiliser la méthode Long.valueOf je dois supprimer les espaces pour qu'il me reste que des chiffres.
mais ça bug, et je ne sais pas pourquoi !

Merci pour vos réponses :)

A voir également:

9 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Pour déboguer peux tu nous dire ce que donne ce code :

public static long StoL(String str)
{
    if (str.isEmpty())
        return 0;
    
    String space = " ";
    String nb = str.replace(space, "");
    
    System.out.println(java.util.Arrays.toString(space.getBytes()));
    System.out.println(java.util.Arrays.toString(str.getBytes()));
    System.out.println(java.util.Arrays.toString(nb.getBytes()));
    
    return Long.valueOf(nb);
}

La confiance n'exclut pas le contrôle
1
talbsbast Messages postés 53 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour,

walidovich_85 :

Oui j'avoue que ça n'a aucun sens voici le début de la fonction

class monaction implements ActionListener {

public void actionPerformed(ActionEvent arg0) {
Point E[];
Point P = new Point(0, 0);
Point Q = new Point(0, 0);
Point R = new Point(0, 0);
int i, j;
String s;
long n = 0, q = 0, a = 0, b = 0;
a = Point.StoL(Tex[0].getText());
b = Point.StoL(Tex[1].getText());
q = Point.StoL(Tex[2].getText());

le reste si des calculs

KX :

voila le résultat affiché : j'ai mis comme entrée "1 234"
[32]
[49, -96, 50, 51, 52]
[49, -96, 50, 51, 52]


Merci beaucoup :)
1
talbsbast Messages postés 53 Date d'inscription   Statut Membre Dernière intervention   1
 
Mon Tex[0] je l'ai créé comme ça :

Tex[i] = new JFormattedTextField(NumberFormat.getNumberInstance());

pour stoker que les nombre dans mon champ d'écriture, et du coups ça ajoute des espaces automatiquement entre chaque groupe de 3 chiffres "1 424 128"
mais apparemment ce sont pas des espaces ordinaires, je ne sais pas comment les supprimer afin de transformer ce String en long.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Tu as un problème d'encodage. Les espaces que tu as dans ton code sont "normaux" (byte=32), mais ceux que tu tapes dans ton interface graphique sont différents (byte=-96)
Java essaye de supprimer tous les byte 32 mais il n'y en a pas car tu n'as que des byte -96

Après quelques recherches, le byte -96 correspond au "non-breaking space" (  en html) qui est différent de l'espace.

Voici une manière de modifier ton code, en ne supprimant pas uniquement les espaces, mais tout ce qui n'est pas des chiffres (ou les signes + et -)

String nb = s.replaceAll("[^\\d-\\+]", "");
0
talbsbast Messages postés 53 Date d'inscription   Statut Membre Dernière intervention   1
 
Merci beaucoup KX pour votre aide, ça marche parfaitement :)
j'ai bien aimé votre astuce
0
walidovich_85 Messages postés 608 Date d'inscription   Statut Membre Dernière intervention   73
 
Le roi KX.
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

« ça bug », ça n'est pas très clair !
Un message d'erreur ? À la compilation ? À l'exécution ? Un comportement non souhaité ? Un résultat différent de celui attendu ?

Xavier
0
talbsbast Messages postés 53 Date d'inscription   Statut Membre Dernière intervention   1
 
voila le message d'erreur
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "2 132"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at java.lang.Long.valueOf(Unknown Source)
at Point.StoL(Point.java:158)
at Fenetre$monaction.actionPerformed(Fenetre.java:145)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
walidovich_85 Messages postés 608 Date d'inscription   Statut Membre Dernière intervention   73
 
Bonsoir,

Ta fonction marche très bien. et l'erreur ne peut pas venir de la fonction StoL directement.

Mais c clair que cette fonction fait partie d'un code plus large qui contient des boutons et des entrées sorties.

Si vous pouvez le partager, ça serait plus facile pour vous aider.

Bonne chance
0
talbsbast Messages postés 53 Date d'inscription   Statut Membre Dernière intervention   1
 
La fonction est utilisé dans cette ligne :

long a = Point.StoL(Tex[0].getText());

avec Tex est un tableau de JLabel

j'ai essayé ma fonction StoL séparément dans le main avec un exemple est ça marche marfaitement, mais quand j'essaie de l'utiliser avec ma fenêtre avec java swing ça m'affiche cette erreur.
j'ai mis un affichage de nb dans ma fonction StoL pour voir est ce que les espaces ont été bien supprimé, mais apparament il supprime pas les espaces, du coup ValueOf bug avec des espaces entre les chiffres
0
walidovich_85 Messages postés 608 Date d'inscription   Statut Membre Dernière intervention   73
 
Puisque la fonction marche parfaitement séparée, alors l'erreur ne peut venir que de l'entrée T[0].getText();

Pouvez vous l'afficher avant de la passer vers la fonction SotL?

Being normal is boring... being geek is interesting
0
talbsbast Messages postés 53 Date d'inscription   Statut Membre Dernière intervention   1
 
Pour une entrée par exemple dans T[0].getText() je mis "12 345"
j'ai fait un affichage de T[0].getText(); il l'affiche bien "12 345"
le problème quand j'affiche nb :
String nb = s.replace(" ", "");
System.out.println(nb);
il m'affiche nb = "12 345" !!!!!! il ne supprime pas les espaces !!!
je ne comprend rien !
toute à l'heur je me suis trompé en vous disant que T[0] est un JLabel en fait c'est un JFormattedTextField, mais ça ne change rien au problème j'imagine.

Merci pour votre aide si vous avez des idées :)
0
walidovich_85 Messages postés 608 Date d'inscription   Statut Membre Dernière intervention   73
 
J'ai testé ça:

public static void main(String args[]) throws Exception
    {
 String s = new String("129 98  287");
 System.out.println("La chaine s :\t\t" + s);
 JFormattedTextField jt = new JFormattedTextField(s);
 Long l = StoL(jt.getText());
 System.out.println("l'entier Long: \t\t" + l);
    }


résultat parfait:

La chaine s :            129 98  287
nb dans la fonction:     12998287
l'entier Long:           12998287


ça n'a aucun sens qu ça fonctionne pas chez vous.
Si non, pouvez vous encore partager la partie du code qui implique le JFormattedTextField?

Being normal is boring... being geek is interesting
0