Rechercher : dans
Par :

Découper un String en java

Dernière réponse le 24 nov 2009 à 21:56:04 Niels, le 14 mar 2008 à 09:12:14 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Firefox 2.0.0.12

Meilleures réponses pour « Découper un String en java » dans :
Javascript - L'objet String VoirLes particularités de l'objet String string est un mot anglais qui signifie "chaîne", il s'agit en fait de chaîne de caractères. L'objet String est un objet qui contient un certain nombre de propriétés et de méthodes permettant la manipulation...
Java - Premier programme VoirPremière application avec Java La première chose à faire est de créer un simple fichier texte (sans mise en forme) et de taper les quelques lignes suivantes : // Votre premiere application en Java class FirstApp { public static void main...
Java - Les packages VoirIntroduction aux packages La programmation Java consiste à créer des classes. Or, étant donné qu'un programme est généralement développé par une équipe de programmeurs, c'est-à-dire plusieurs personnes, le fait de concaténer (mettre bout à bout)...

1

Niels, le 14 mar 2008 à 09:47:10
  • +1

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...

Répondre à Niels

2

Niels, le 14 mar 2008 à 09:55:56

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

Répondre à Niels

3

kij_82, le 14 mar 2008 à 10:29:52
  • +3

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.


~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82

4

Niels, le 14 mar 2008 à 12:11:44

Merci bien pour ta réponse, je mets en place le code que tu as laissé et je corrigerais, si besoin est !

Niels

Répondre à Niels

5

Niels, le 14 mar 2008 à 12:17:56

Il n'affiche pas le mot de passe. Je n'arrive pas à trouver l'erreur. Pourrais-tu m'aider ?

Répondre à Niels

6

kij_82, le 14 mar 2008 à 13:04:19


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);

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82

7

Niels, le 14 mar 2008 à 13:55:00

Merci, c'est très gentil à toi de m'avoir aidé. Le code fonctionne désormais :)

Répondre à Niels

8

raphix, le 5 sep 2008 à 12:08:47

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é.

Répondre à raphix

9

 brrrrrr pop, le 24 nov 2009 à 21:56:04

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"

Répondre à brrrrrr pop