Chaine de caractère en java???

[Résolu/Fermé]
Signaler
Messages postés
124
Date d'inscription
samedi 9 décembre 2000
Statut
Membre
Dernière intervention
17 février 2014
-
Messages postés
124
Date d'inscription
samedi 9 décembre 2000
Statut
Membre
Dernière intervention
17 février 2014
-
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

7 réponses

Messages postés
124
Date d'inscription
samedi 9 décembre 2000
Statut
Membre
Dernière intervention
17 février 2014
2
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
124
Date d'inscription
samedi 9 décembre 2000
Statut
Membre
Dernière intervention
17 février 2014
2
S.V.P répondez moi c urgent
Merci

Oo
tu es sûr que c'est du JAVA ?
Messages postés
124
Date d'inscription
samedi 9 décembre 2000
Statut
Membre
Dernière intervention
17 février 2014
2
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

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
Messages postés
124
Date d'inscription
samedi 9 décembre 2000
Statut
Membre
Dernière intervention
17 février 2014
2
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

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

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

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
Messages postés
124
Date d'inscription
samedi 9 décembre 2000
Statut
Membre
Dernière intervention
17 février 2014
2
Merci beaucoup Danimo
Si j'ai besoin d'autre chose
je vais vous contactez
merci encore une foix et bonne soirée
Messages postés
124
Date d'inscription
samedi 9 décembre 2000
Statut
Membre
Dernière intervention
17 février 2014
2
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"