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 -
walidovich_85 Messages postés 608 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai créé la méthode suivante :
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 :)
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:
- Supprimer les espaces dans un String
- Supprimer rond bleu whatsapp - Guide
- Espaces insécables - Guide
- Supprimer une page dans word - Guide
- Impossible de supprimer un fichier - Guide
- Supprimer pub youtube - Accueil - Streaming
9 réponses
Bonjour,
Pour déboguer peux tu nous dire ce que donne ce code :
La confiance n'exclut pas le contrôle
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
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 :)
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 :)
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.
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.
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 -)
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-\\+]", "");
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
« ç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
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)
....
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)
....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
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
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
Pouvez vous l'afficher avant de la passer vers la fonction SotL?
Being normal is boring... being geek is interesting
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 :)
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 :)
J'ai testé ça:
résultat parfait:
ç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
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