Téléchargement
illégal
Posez votre question Signaler

Découper un String en java [Résolu]

Niels - Dernière réponse le 24 nov. 2009 à 21:56
Bonjour,
Je réalise une application web dans laquelle je récupère une URL. Une fois récupérée, je dois travailler dessus pour extirper un mot de passe et un login.
Imaginons l'URL suivante :
http://localhost:8080/mdp=blablabl&&login=bliblibli/
J'arrive, dans un premier temps, à découper l'URL de façon a récupérer "mdp=....&&login=..../". Ensuite, je récupère le mot de passe avec l'expression suivante :
String url="http://localhost:8080/mdp=blablabl&&login=bliblibli/";
String login=url.substring(22,url.lastIndexOf("/"));
System.out.println(login);
String mdp = login.substring(4, login.lastIndexOf("&&"));
System.out.println(mdp);
(l'URL est entré en dur pour l'instant, ce n'est que ma partie "test" du programme)
Je récupère donc "blablabla". Mais pour récupérer "bliblibli" c'est une autre histoire... En effet, la longueur de l'URL jusqu'au mot de passe est toujours la même. Il est donc facile de récupérer le mot de passe. Mais ce dernier peut avoir une taille variable donc je ne sais pas comment récupérer le login.
Quelqu'un aurait-il une idée pour me mettre sur la voie ?
Je vous remercie d'avance,
Niels
Lire la suite 

Découper un String en java »

9 réponses
Réponse
+10
moins plus
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 :

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.

Niels - 14 mars 2008 à 12:17
Il n'affiche pas le mot de passe. Je n'arrive pas à trouver l'erreur. Pourrais-tu m'aider ?
kij_82- 14 mars 2008 à 13:04

Le fait est que j'ai oublié d'ajouter 1 à cette ligne :
		url = url.substring(url.lastIndexOf("/"));


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 :
		url = url.substring(url.lastIndexOf("/")+1);


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);
Niels - 14 mars 2008 à 13:55
Merci, c'est très gentil à toi de m'avoir aidé. Le code fonctionne désormais :)
Ajouter un commentaire
Réponse
+1
moins plus
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...
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+1
moins plus
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é.
brrrrrr pop - 24 nov. 2009 à 21:56
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"
Ajouter un commentaire
Ce document intitulé « Découper un String en java » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?