Chaine de caractère en java???

Résolu/Fermé
aminos88 Messages postés 124 Date d'inscription samedi 9 décembre 2000 Statut Membre Dernière intervention 17 février 2014 - 10 mars 2009 à 19:03
aminos88 Messages postés 124 Date d'inscription samedi 9 décembre 2000 Statut Membre Dernière intervention 17 février 2014 - 12 mars 2009 à 18:59
Bonjour,
J'ai une méthode en java qui retourne la chaine de caractère très longue suivante
RESPONSE[requestID=1918137061, errorStatus=Success(0), errorIndex=0, VBS[1.3.6.1.2.1.1.5.0 = PCS]] 

Est je peut faire une autre méthode dans la même classe qui prend en paramètre cette même chaine de caractère et retourner juste une partie de cette chaine
Voila un exemple qui illustre ce que je veux faire
*chaine entrée en paramètre a la fonction
RESPONSE[requestID=1918137061, errorStatus=Success(0), errorIndex=0, VBS[1.3.6.1.2.1.1.5.0 = PCS]] 

*chaine en sortie
PCS


Merci de me donner cette metohde qui va me permettre de faire ce traitement merci
A voir également:

7 réponses

aminos88 Messages postés 124 Date d'inscription samedi 9 décembre 2000 Statut Membre Dernière intervention 17 février 2014 2
12 mars 2009 à 14:58
Merci mais moi je veux un code qui peut me renvoyer plusieures partie d'une chaine
voila l'exemlpe que je veux le réaliser


EntréeChaine=RESPONSE[requestID=248177987, errorStatus=Success(0), errorIndex=0, VBS[1.3.6.1.2.1.1.5.0 = LAPTOP; 1.3.6.1.2.1.2.1.0 = 3; 1.3.6.1.2.1.1.3.0 = 3:31:33.90; 1.3.6.1.2.1.1.7.0 = 76]]
SortieChaine1=LAPTOP
SortieChaine2= 3
SortieChaine3= 3:31:33.90
SortieChaine4=76

Merci de répondre le plus vite possible c urgnet
Bonne soirée
1
aminos88 Messages postés 124 Date d'inscription samedi 9 décembre 2000 Statut Membre Dernière intervention 17 février 2014 2
10 mars 2009 à 19:41
S.V.P répondez moi c urgent
Merci
0
Friday_XIII
10 mars 2009 à 20:18
Oo
tu es sûr que c'est du JAVA ?
0
aminos88 Messages postés 124 Date d'inscription samedi 9 décembre 2000 Statut Membre Dernière intervention 17 février 2014 2
10 mars 2009 à 20:29
L'essentiel c pas du java ou nn
l'essentiel que c une chaine de caractère et je veut la faire des traitements
merci
0
Utilisateur anonyme
11 mars 2009 à 01:24
Salut,

oui à condition que la chaîne soit accessible aux 2 méthodes, par exemple en la déclarant par exemple dans la classe. C'est pareil pour ce que tu veux retourner (retour dans l'exemple qui suit).

RESPONSE[requestID=1918137061, errorStatus=Success(0), errorIndex=0, VBS[1.3.6.1.2.1.1.5.0 = PCS]]

Appelons cette chaîne maChaine, et il est évident que c'est un String.

Il y a plusieurs manières de récupérer une partie de cette chaîne.

Nous utiliserons la méthode substring.

Ici nous voulons retourner le mot PCS et supposerons que quelle que soit la chaîne, le mot à récupérer se trouve toujours entre (= ) et (]])

soit .......... = lemot]] car il faut bien une hypothèse de travail...

Voici comment faire:
String maChaine =
"RESPONSE[requestID=1918137061, errorStatus=Success(0), errorIndex=0, VBS[1.3.6.1.2.1.1.5.0 = PCS]]";
String retour = ""; // pour retourner le résultat
// nous aurons besoin de la longueur de la chaine:
int lgCh = maChaine.length();
// nous vérifions que maChaine termine bien par ]]
if (maChaine.endsWith("]]"))
{
// recherche de l'endroit du signe = dans la chaine
int index = maChaine.lastIndexOf("="); // lastIndexOf pour ne pas prendre le 1er = mais le dernier
// s'il n'y a pas de signe = , le résultat est index = -1
System.out.println("lgCh/index = " + lgCh + "/" + index);
if (index > -1) //c'est bon
// cas général: index prend une valeur de 0 a longueur de la chaine -1
// dans notre exemple index doit etre = a longueur - 7
{
retour = maChaine.substring(index+2,lgCh-2);
}
else retour = ""; // afficher un message d'erreur
}
else retour = ""; // afficher un message d'erreur
System.out.println("retour = " + retour);

Cordialement,

Dan
0
aminos88 Messages postés 124 Date d'inscription samedi 9 décembre 2000 Statut Membre Dernière intervention 17 février 2014 2
11 mars 2009 à 21:55
Merci beaucoup sa marché très bien c gentil de votre part
Maintenant est ce que vous pouvez me donnez un code qui je je peut le considerer comme général et il fonctionne avec plusieures cas c â d est ce que je peut retourner plusieures parties d'une même chiane
voila comme cette exemple:
chaine1=RESPONSE[requestID=512652454, errorStatus=Success(0), errorIndex=0, VBS[1.3.6.1.2.1.1.7.0 = 76; 1.3.6.1.2.1.1.5.0 = PCS]]
chaineRes1=76
chineRes2= PCS
Merci beaucoup
0

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

Posez votre question
Utilisateur anonyme
12 mars 2009 à 00:07
Salut,

Comme pour le premier cas :
RESPONSE[requestID=1918137061, errorStatus=Success(0), errorIndex=0, VBS[1.3.6.1.2.1.1.5.0 = PCS]]
où pour extraire PCS (ou bien n'importe quelle autre valeur) il faut absolument que cette valeur se trouve entre le signe = un espace et ]] et que cet "ensemble" >>>> = laValeur]] se trouve toujours à la fin de la chaîne, pour tout autre extrait à faire, il faut que cet extrait soit toujours précédé et suivi des MÊMES CARACTÈRES, car je suppose qu'on ne peut pas obtenir une structure sur mesure de cette chaîne.

Il faut donc connaître la structure de toutes les réponses possibles et que cette structure soit toujours la même.

Par exemple avec chaine1:
RESPONSE[requestID=512652454, errorStatus=Success(0), errorIndex=0, VBS[1.3.6.1.2.1.1.7.0 = 76; 1.3.6.1.2.1.1.5.0 = PCS]]
je vois que tu as ajouté pour VBS[....... = 76; la logique voudrait que ce soit = 76, mème si ce serait plus facile d'extraire 76 s'il est suivi d'un ; (à condition qu'il n'existe pas d'autre ; dans la chaîne.

Essais donc de trouver tous les cas possibles de réponses et on déterminera la méthode pour faire ce ou ces extraits. Je pense qu'on a toujours les reponse sous la forme:
unLibellé=uneValeur, unAutreLibellé=uneAutreValeur, etc... et pour finir unDernierLibelle=une DernièreValeur]]

Corriges moi si nécessaire.

On pourait peut-être utiliser autre chose que substring, je pense par exemple à StringTokenizer mais pas forcément.


Cordialement,

Dan
0
Utilisateur anonyme
12 mars 2009 à 15:31
Salut,

Voilà, vos désirs sont des ordres:


String chaine1="RESPONSE[requestID=512652454, errorStatus=Success(0), errorIndex=0, "
+ "VBS[1.3.6.1.2.1.1.7.0 = 76; 1.3.6.1.2.1.1.5.0 = PCS]]";

String chaine2="RESPONSE[requestID=512652454, errorStatus=Success(0), errorIndex=0, "
+ "VBS[1.3.6.1.2.1.1.7.0 = 76; 1.2.3.4.5.6.7.8.0 = 412; 1.3.6.1.2.1.1.5.0 = PCS]]";

String chaine3="RESPONSE[requestID=512652454, errorStatus=Success(0), errorIndex=0, "
+ "VBS[1.3.6.1.2.1.1.5.0 = PCS]]";

String chaine4="RESPONSE[requestID=512652454, errorStatus=Success(0), errorIndex=0, "
+ "VBS[1.3.6.1.2.1.1.7.0 = 76; 1.2.3.4.5.6.7.8.0 = 412]]";

String chaine5="RESPONSE[requestID=248177987, errorStatus=Success(0), errorIndex=0,"
+ "VBS[1.3.6.1.2.1.1.5.0 = LAPTOP; 1.3.6.1.2.1.2.1.0 = 3; 1.3.6.1.2.1.1.3.0 = 3:31:33.90; 1.3.6.1.2.1.1.7.0 = 76]]";

String resultat = "";

String mano = chaine1;
System.out.println("mano = " + mano);
// supposons qu'il n'y a jamais de (;) ailleurs qu'entre VBS[..... et ...]]
// et que c'est ici qu'on fera 0, 1, 2, 100, ... extractions
// j'exagere sans doute mais commençons par les 2 extractions de ton exemple.

int i = 0;

for (i = 0; i < 5; i++) // pour tester 5 chaines
{
int nbrExtract = 0;
int ind1 = mano.indexOf("VBS"); // mais est-ce que nous n'avons que VBS ? si non on corrigera
// en ne prenant que la partie de chaine1 qui commence par le deuxieme ([)
if (ind1 > -1) // si oui OK
{
mano = mano.substring(ind1); // on ne garde que la partie ou on veut extraire
System.out.println("mano = " + mano);
ind1 = 0;
int ind2 = 0;

//Extraction:
while (ind1 > -1)
{
ind1 = mano.indexOf(";");
if (ind1 > -1) // si oui OK
{
ind2 = mano.indexOf("= ");
if (ind2 > -1) // si oui OK, si non c'est une erreur de structure
{
nbrExtract++;
resultat+= "Resultat" + nbrExtract + " " + mano.substring(ind2+2, ind1) + ", ";
System.out.println("resultat = " + resultat);
// on supprime la partie qui nous a servi a faire cette extraction
mano = mano.substring(ind1+1);
System.out.println("mano = " + mano);
}
}
}
// il reste >>>> 1.3.6.1.2.1.1.5.0 = PCS]]

int lgreste = mano.length();
// nous vérifions que maChaine termine bien par ]]
if (maChaine.endsWith("]]"))
{
ind2 = mano.indexOf("= ");
if (ind2 > -1) // si oui OK
{
nbrExtract++;
resultat+= "Resultat" + nbrExtract + " " + mano.substring(ind2+2, lgreste-2) + ".";
System.out.println("resultat = " + resultat);
}
}
}
System.out.println();
if (i == 0)
mano = chaine2;
if (i == 1)
mano = chaine3;
if (i == 2)
mano = chaine4;
if (i == 3)
mano = chaine5;
System.out.println("mano = " + mano);
resultat = "";
}

Cordialement,

Dan
0
Utilisateur anonyme
12 mars 2009 à 18:03
Re,

Et voici la version normale avec une seule chaîne et sans les "println" de contrôle de resultat(qui sont laissés en commentaires //):


String reponse ="RESPONSE[requestID=248177987, errorStatus=Success(0), errorIndex=0,"
+ "VBS[1.3.6.1.2.1.1.5.0 = LAPTOP; 1.3.6.1.2.1.2.1.0 = 3; 1.3.6.1.2.1.1.3.0 = 3:31:33.90; 1.3.6.1.2.1.1.7.0 = 76]]";

String resultat = "";

String mano = reponse;
System.out.println("La chaine traitee = " + mano);

int i = 0;
int ind1 = 0;
int ind2 = 0;
int lgreste = 0;
int nbrExtract = 0;

ind1 = mano.indexOf("VBS"); // mais est-ce que nous n'avons que VBS ? si non on corrige
// en ne prenant que la partie de reponse qui commence par le deuxieme ([)
ind1 = mano.lastIndexOf("["); // on trouve le deuxieme ([) celui de (VBS[) ou de (XXX[)
if (ind1 > -1) // si oui OK si non >>>>>> erreur de structure
{
mano = mano.substring(ind1); // on ne garde que la partie ou on veut extraire
System.out.println("La zone d'extraction = " + mano + "\n");
ind1 = 0;
ind2 = 0;

//Extraction:
while (ind1 > -1)
{
ind1 = mano.indexOf(";");
if (ind1 > -1) // si oui OK
{
ind2 = mano.indexOf("= ");
if (ind2 > -1) // si oui OK, si non c'est une erreur de structure
{
nbrExtract++;
resultat+= "Résultat" + nbrExtract + " = " + mano.substring(ind2+2, ind1) + "\n";
//System.out.println("resultat = " + resultat);
// on supprime la partie qui nous a servi a faire cette extraction
mano = mano.substring(ind1+1);
//System.out.println("mano = " + mano);
}
}
}
// il reste >>>> 1.3.6.1.2.1.1.5.0 = PCS]]

lgreste = mano.length();
// nous vérifions que mano termine bien par ]]
if (mano.endsWith("]]"))
{
ind2 = mano.indexOf("= ");
if (ind2 > -1) // si oui OK
{
nbrExtract++;
resultat+= "Résultat" + nbrExtract + " = " + mano.substring(ind2+2, lgreste-2);
//System.out.println(resultat); //"resultat = " + resultat);
}
}
}
//System.out.println("Le resultat:\n" + resultat + "\n"); //"resultat = " + resultat);
// le résultat peut etre affiché dans une boite de dialogue:
javax.swing.JOptionPane.showMessageDialog(null,resultat); // sans les (,) et le (.) final

Cordialement,

Dan
0
aminos88 Messages postés 124 Date d'inscription samedi 9 décembre 2000 Statut Membre Dernière intervention 17 février 2014 2
12 mars 2009 à 18:58
Merci beaucoup Danimo
Si j'ai besoin d'autre chose
je vais vous contactez
merci encore une foix et bonne soirée
0
aminos88 Messages postés 124 Date d'inscription samedi 9 décembre 2000 Statut Membre Dernière intervention 17 février 2014 2
12 mars 2009 à 18:59
Merci beaucoup Danimo
Si j'ai besoin d'autre chose
je vais vous contactez
merci encore une foix et bonne soirée
voila mon mail "aminsahnoun@hotmail.com"
0