Pb avec data.indexof(String string);

Fermé
Comprend pas pk - 18 mai 2016 à 19:26
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 21 mai 2016 à 09:04
Bonjour,

J'ai un problème dans mon programme en java.
J'ai une chaine type String composée :data = adresse ip + " " + Le jj/mm/aa hh:mm
Dans mon programme, j'ai besoin de récupérer l'adresse ip:
data.substring(0,data.indexOf(" ")); //Recup de la position 0 jusqu'au 1er espace
D'un autre côté j'ai besoin de recupérer la date et l'heure:
data.substring(data.indexOf("L")); //Récupérer la chaine à partir du "L"

MAIS lors de la récupération de la date et de l'heure je me retrouve avec l'adresse IP ??
J'ai le même résultat avec les deux façons de faire ?

Merci de vos réponses

Cordialement

1 réponse

KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
18 mai 2016 à 22:09
Bonjour,

Est-ce que tu pourrais nous indiquer ton code et des exemples de String une fois complétée, parce qu'avec tes explications ce n'est pas très clair.
0
Comprend pas pk
21 mai 2016 à 00:39
Bah en fait je viens récupérer un String dans un fichier et ensuite je voudrais extraire juste les infos qu'il me faut

String data = "192.168.1.1 Le 01/01/2016";
String ip = data.substring(0,data.indexOf(" "));
String date = data.substring(data.indexOf("L"));

Et les variables ip et date renvoient la même chose, et je sait pas pourquoi.

Merci
0
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
21 mai 2016 à 09:04
C'est beaucoup plus clair comme ça :-)

Cependant, ip renvoie bien "192.168.1.1" et date "Le 01/01/2016" comme attendu.
Ton problème doit être plus loin, peut-être à l'affichage de ip et date...

Remarque :
Plutôt qu'utiliser substring tu peux faire mieux avec des expressions régulières.

Exemple :
String data = "192.168.1.1 Le 01/01/2016";
String regex = "((\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)) ((\\D+)((\\d+)/(\\d+)/(\\d+)))";

// import java.util.regex.*
Matcher matcher = Pattern.compile(regex).matcher(data);
matcher.matches();
for (int i = 0; i <= matcher.groupCount(); i++) {
    System.out.printf("group %d:\t%s\n", i, matcher.group(i));
}

Ce qui donne :
group 0:	192.168.1.1 Le 01/01/2016
group 1: 192.168.1.1
group 2: 192
group 3: 168
group 4: 1
group 5: 1
group 6: Le 01/01/2016
group 7: Le
group 8: 01/01/2016
group 9: 01
group 10: 01
group 11: 2016

Voir la documentation de java.util.regex.Pattern pour le format de regex.
0