Découper un String en java
Résolu/Fermé
A voir également:
- Découper un String en java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Comment découper un pdf - Guide
- Jeux java itel 5360 - Forum Mobile
- Java apk - Télécharger - Langages
4 réponses
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
14 mars 2008 à 10:29
14 mars 2008 à 10:29
Bonjour,
Découper par rapport à un entier (une taille donc), c'est pas terrible. Du moins si tu veux réutiliser ton code par la suite c'est trop spécifique, il faudrait que tu recalcule et ré-ajuste ces entiers pour justement pas que tu ai un indexOutOfBoundException si tu change l'url en entrée.
Ce que je te conseille de faire c'est de découper par rapport à ce que tu sais qu'il y a dans ta chaine de caractère.
Par exemple tu peux en premier lieu supprimer le dernier "/" si ta chaine fini par ce caractère.
Ensuite tu découpe par rapport au dernier "/" pour récupérer ce qui vient après :
Ensuite pour ce qui est de récupérer les paramètres, il te suffit de faire un split de ta chaine de caractère selon la chaine "&&", puis de traiter tes paramètres :
Le code donné ci-dessus a été tapé directement sur le forum, donc n'est ni testé ni validé au niveau de la syntaxe, mai ça devrait à priori fonctionner correctement.
Découper par rapport à un entier (une taille donc), c'est pas terrible. Du moins si tu veux réutiliser ton code par la suite c'est trop spécifique, il faudrait que tu recalcule et ré-ajuste ces entiers pour justement pas que tu ai un indexOutOfBoundException si tu change l'url en entrée.
Ce que je te conseille de faire c'est de découper par rapport à ce que tu sais qu'il y a dans ta chaine de caractère.
Par exemple tu peux en premier lieu supprimer le dernier "/" si ta chaine fini par ce caractère.
Ensuite tu découpe par rapport au dernier "/" pour récupérer ce qui vient après :
String url="http://localhost:8080/mdp=blablabla&&login=bliblibli/"; if ( url.endsWith("/") ) url = url.substring(0,url.length-1); // --- Take only after last character '/' url = url.substring(url.lastIndexOf("/"));
Ensuite pour ce qui est de récupérer les paramètres, il te suffit de faire un split de ta chaine de caractère selon la chaine "&&", puis de traiter tes paramètres :
String[] params = url.split("&&"); String[] myCurrParam = null; String login = "", mdp = ""; for ( int i = 0; i < params.length; i++ ){ // --- Split by character '=' in order to retrieve parameter name & value myCurrParam = params[i].split("="); if ( myCurrParam != null && myCurrParam.length >= 2 ){ if ( myCurrParam[0].equalsIgnoreCase("login") ) login = myCurrParam[1]; else if ( myCurrParam[0].equalsIgnoreCase("mdp") ) mdp = myCurrParam[1]; } else System.err.println("Bad parameter in url : ignored."); } System.out.println("Login : "+login); System.out.println("Mot de passe : "+mdp);
Le code donné ci-dessus a été tapé directement sur le forum, donc n'est ni testé ni validé au niveau de la syntaxe, mai ça devrait à priori fonctionner correctement.
Je viens d'essayer ceci :
String url="http://localhost:8080/mdp=blablabla&&login=bliblibli/";
String login=url.substring(22,url.lastIndexOf("/"));
System.out.println(login);
String mdp = login.substring(4, login.lastIndexOf("&&"));
System.out.println(mdp);
System.out.println(mdp.length());
int longueur = 4+mdp.length()+8;
String identifiant=login.substring(longueur, login.lastIndexOf("/"));
System.out.println(identifiant);
Mais, j'ai cette erreur qui m'est retournée :
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -22
at java.lang.String.substring(Unknown Source)
at main.main(main.java:28)
Je ne comprends pas pourquoi...
String url="http://localhost:8080/mdp=blablabla&&login=bliblibli/";
String login=url.substring(22,url.lastIndexOf("/"));
System.out.println(login);
String mdp = login.substring(4, login.lastIndexOf("&&"));
System.out.println(mdp);
System.out.println(mdp.length());
int longueur = 4+mdp.length()+8;
String identifiant=login.substring(longueur, login.lastIndexOf("/"));
System.out.println(identifiant);
Mais, j'ai cette erreur qui m'est retournée :
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -22
at java.lang.String.substring(Unknown Source)
at main.main(main.java:28)
Je ne comprends pas pourquoi...
c'est bon, j'ai réussi et j'ai compris le message d'erreur.
voici le code que j'ai utilisé :
String url="http://localhost:8080/mdp=blablabla&&login=bliblibli/";
String login=url.substring(22,url.lastIndexOf("/"));
System.out.println(login);
String mdp = login.substring(4, login.lastIndexOf("&&"));
String x=login;
System.out.println(mdp);
System.out.println(mdp.length());
int longueur = 4+mdp.length()+8;
int log=login.length();
String identifiant=x.substring(longueur, log);
System.out.println(identifiant);
Niels
voici le code que j'ai utilisé :
String url="http://localhost:8080/mdp=blablabla&&login=bliblibli/";
String login=url.substring(22,url.lastIndexOf("/"));
System.out.println(login);
String mdp = login.substring(4, login.lastIndexOf("&&"));
String x=login;
System.out.println(mdp);
System.out.println(mdp.length());
int longueur = 4+mdp.length()+8;
int log=login.length();
String identifiant=x.substring(longueur, log);
System.out.println(identifiant);
Niels
On peut faire ça avec une regex, c'est plus concis.
String url="http://localhost:8080/mdp=blablabla&&login=bliblibli/";
Pattern p = Pattern.compile(mdp=\\(.*\\)&&login=\\(.*\\)\/);
Matcher m = p.matcher(url);
if(m.find){
String login = m.group(2);
String mdp=m.group(1);
}
code tapé en direct, non vérifié.
String url="http://localhost:8080/mdp=blablabla&&login=bliblibli/";
Pattern p = Pattern.compile(mdp=\\(.*\\)&&login=\\(.*\\)\/);
Matcher m = p.matcher(url);
if(m.find){
String login = m.group(2);
String mdp=m.group(1);
}
code tapé en direct, non vérifié.
le pattern tu peux le simplifier avec un split ().
ca te coupe ton string et plusieurs bouts.
par ex :
String b = blabla&&blibli
String f [] = b.split ("&&") ;
String h = f[0];
String g= f[1] ;
System.out.println ("pass : "+h) ; ----> va sortir dans la console "pass : blabla"
System.out.println ( "login : +g) ; ----> va sortir dans la console "login : blibli"
ca te coupe ton string et plusieurs bouts.
par ex :
String b = blabla&&blibli
String f [] = b.split ("&&") ;
String h = f[0];
String g= f[1] ;
System.out.println ("pass : "+h) ; ----> va sortir dans la console "pass : blabla"
System.out.println ( "login : +g) ; ----> va sortir dans la console "login : blibli"
14 mars 2008 à 12:11
Niels
14 mars 2008 à 12:17
14 mars 2008 à 13:04
Le fait est que j'ai oublié d'ajouter 1 à cette ligne :
Ce qui fait que le dernier '/' est compris dans la chaine, du coup il y a "/mdp=" et non "mdp=".
Il suffit donc d'exclure le '/' lorsqu'on fait le substring :
Le reste du code ne change pas. (si ce n'est qu'il faut mettre () sur la méthode .length de ce code :
url = url.substring(0,url.length()-1);
14 mars 2008 à 13:55