[Java] Problème de tableau

Résolu
valentin2703 Messages postés 180 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je doit récupérer des informations dans un fichier texte, pour cela j'utilise la méthode split.
Le fichier texte ressemble à cela :

* GigabitEthernet1/1
* GigabitEthernet1/2
* GigabitEthernet2/1

et dedans je ne souhaite récupérer que les GigabitEthernetx/x, je fait donc :

try{
     BufferedReader lire = new BufferedReader(new FileReader("C:/Essaie.txt"));
     String line;
     while ((line = lire.readLine())!= null){
          String[] decompose = line.split(" +");
	  System.out.println(decompose[1]);
     }
     lire.close();
     }catch(IOException z){
          System.exit(0);
     }


Mais quand je lance le code je me retrouve avec ceci :

GigabitEthernet1/1
java.lang.ArrayIndexOutOfBoundsException: 1

L'affichage du premier GigabitEthernet marche bien, mais le reste bloque ^^"

A voir également:

4 réponses

valentin2703 Messages postés 180 Date d'inscription   Statut Membre Dernière intervention   9
 
Je tien a préciser que lorsque que je lui demande d'afficher decompose[0], il affiche bien les 3 étoiles.
0
poukkid Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   11
 
J'ai testé chez moi et ca fonctionne tres bien, même si je ne comprend pas à quoi sert le + dans le split(" +"), avec ou sans le + en tout cas ca fonctionne bien.
Le probleme doit venir de ton fichier. Ya t'il une ligne vide entre tes * Giabit... ?
ou bien un caractère spécial?
Si une ligne ne te permet d'avoir qu'une seule case dans ta variable decompose, alors decompose[1] t'amenera cette renverra cette erreur.
0
valentin2703 Messages postés 180 Date d'inscription   Statut Membre Dernière intervention   9
 
Le + signifie : un espace ou plus.
Alors ce fichier n'est pas le vraie que je récupère, j'ai en effet remarquer que quand je le crée moi même cela marche très bien, par contre quand je prend le fichier récupéré sur le switch, ça plante ^^
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Pour une expression régulière, "un espace ou plus" devrait être "[\\s]+"
0
bzkr7 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   2
 
Je te propose la solution suivante en utilisant des ArrayList et on changeant la syntaxe du fichier texte.

Pour le fichier Texte il faut que tes instructions soient écrit de cette façon La;

GigabitEthernet1/1
GigabitEthernet1/2
GigabitEthernet2/1

JE TE CONSIELLE d'utiliser bloc note pour l édition du fichier texte
Ensuite puisque on lit notre fichier ligne par ligne donc on qu'a stocker chaque line dans notre ArrayList.

Le Code JAVA est :

try{
BufferedReader lire = new BufferedReader(new FileReader("C:/algotest.txt"));

ArrayList decompose = new ArrayList();
int i=0;
String str=null;

while ((str=lire.readLine())!= null){

decompose.add(str);
System.out.print(decompose.get(i).toString()+"\n");
i++;
}
lire.close();
}catch(IOException z){
System.exit(0);
}



" Si tu as de nombreuses richesses, donne de ton bien ; si tu possèdes peu, donne de ton coeur. "
0
bzkr7 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   2
 
Remarque : ne pas oublier de changer le nom du fichier texte dans le programme "algotest.txt"
0
valentin2703 Messages postés 180 Date d'inscription   Statut Membre Dernière intervention   9
 
Merci pour ta solution, j'arrive bien a lire le fichier texte. Sauf que moi je ne souhaite récupéré que les GigabitEthrnet. Je ne peut pas me permettre de l'éditer à la main, cela doit ce faire de façons automatique.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Voici une manière de faire, sans avoir à modifier ton fichier...
import java.io.File;
import java.io.FileNotFoundException;

import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class Test 
{    
    public static void main(String[] args) throws FileNotFoundException
    {
        List<String> liste = new LinkedList<String>();
        
        Scanner sc = new Scanner(new File("C:\\Essaie.txt")).useDelimiter("[\\s*]+");
        
        while(sc.hasNext())
            liste.add(sc.next());    
        
        sc.close();
        
        String[] decompose = liste.toArray(new String[liste.size()]);
        
        for (String s : decompose)
            System.out.println(s);        
    }
}
0
valentin2703 Messages postés 180 Date d'inscription   Statut Membre Dernière intervention   9
 
J'aime bien ta solution KX, comment je doit faire si je veut préciser que seul le GigabitEthernet m'intéresse ?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Je croyais que tu voulais GigabitEthernetx/x mais si tu ne veux que GigabitEthernet, tu peux mettre :
useDelimiter("[\\W\\d]+")
0
valentin2703 Messages postés 180 Date d'inscription   Statut Membre Dernière intervention   9
 
Oui enfin je veut le x/x avec ^^ C'est juste que dans le fichier il n'y a pas que :
* GigabitEthernetx/x sur la ligne.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Alors donne moi un exemple complet de fichier, peut-être qu'il vaudrait mieux utiliser un pattern sur les éléments plutôt que sur le délimiteur (ou une combinaison des deux)

String pattern1,pattern2;

sc.useDelimiter(pattern1);

while (sc.hasNext(pattern2))
    liste.add(sc.next(pattern2));
0