IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

[Split] Chaîne de caractères avec espace variable


Sujet :

Java

  1. #1
    Membre averti
    Avatar de smarlytomtom
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2014
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 139
    Points : 373
    Points
    373
    Billets dans le blog
    1
    Par défaut [Split] Chaîne de caractères avec espace variable
    bonjour à tous,
    Je suis actuellement amené à travailler sur une pseudo base de donnée qui se trouve être au format .txt ! hors les données n'y sont organisés que grossièrement et le nombre d'espaces entre les différents champs d'une même ligne est variable !
    Je cherche donc à "spliter" mes lignes de sorte à ce que quelque soit le nombre d'espaces entre deux champs java sache passer au dessus et ne prendre que les informations qui m'intéressent sans butter sur chacun des espaces présents dans la ligne en cour de traitement.

    Pour le moment je réalise les actions suivantes :
    - Je charge le fichier dans la mémoire en le stockant ligne par ligne dans une liste.
    - Je passe la liste récupérée dans une fonctions qui à pour but de réalisé les actions décrites plus haut et renvoyé une nouvelle liste.

    Voici mon code si cela peut vous aider !

    Main.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    import java.util.List;
     
    import fr.faurecia.files.FileParser;
    import fr.faurecia.utils.ParserUtils;
     
    public class Main {
     
    	public static void main(String[] args) {
     
    		FileParser parser = new FileParser();
    		parser.openFile("source.txt");
     
    		List<String> buffer = parser.getBuffer();
    		List<String> fields = ParserUtils.getFields(buffer);
     
    		for(String s : fields){
     
    			System.out.println();
     
    		}
     
    		parser.cleanUp();
     
    	}
     
    }
    FileParser.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.util.ArrayList;
    import java.util.List;
     
    public class FileParser {
     
    	String lastFilePath = null;
    	List<String> buffer = new ArrayList<String>();;
     
    	public void openFile(String filePath){
     
    		this.lastFilePath = filePath;
     
    		try {
     
    			FileReader file = new FileReader(filePath);
    			BufferedReader reader = new BufferedReader(file);
    			String line = null;
     
    			while((line = reader.readLine()) != null){
     
    				this.buffer.add(line);
     
    			}
     
    			file.close();
    			reader.close();
     
    		} catch (Exception e) { e.printStackTrace(); }
     
     
    	}
     
    	public void cleanUp(){
     
    		this.buffer.clear();
     
    	}
     
    	public List<String> getBuffer(){
     
    		return this.buffer;
     
    	}
     
    	public String getLastFilePath(){
     
    		return this.lastFilePath;
     
    	}
     
    }
    et ParserUtils.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    import java.util.ArrayList;
    import java.util.List;
     
    public class ParserUtils {
     
    	public static List<String> getFields(List<String> rawLines){
     
    		List<String> allFields = new ArrayList<String>();
     
    		for(String line : rawLines){
     
    			String[] fields = line.split(" ");
     
    			for(String field : fields){
     
    				allFields.add(field);
     
    			}
     
    		}
     
    		return allFields;
     
    	}
     
    }
    Le nom des package n'est pas présent mais c'est normal je ne veux pas me faire taper dessus par mon patron ^^ !

    Ce code à pour résultat une longue liste de ligne vide !
    En vous remerciant d'avance pour vos réponses !

    Edit :

    J'ai trouvé un bout de la solution en continuant à chercher un peu à droite et à gauche !
    J'ai donc trouvé que la méthode split utilisait des expressions régulière, ce qui signifie que la ligne suivante n'aurai jamais fonctionnée :

    ParserUtils.java ligne 14
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String[] fields = line.split(" ");
    Je l'ai donc remplacé par l'expression qui allais bien, ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String[] fields = line.split("\\s");
    Seulement le problème est encore présent car à chaque espace il me créer une nouvelle ligne.
    J'ai donc tenté de faire une vérification par la suite pour supprimer ces ligne de la liste, ce qui donne :

    à la suite dans ParserUtils.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for(int i = 0; i < allFields.size(); i++){
     
    			if(allFields.get(i).equals(" ")){
     
    				allFields.remove(i);
     
    			}
     
    		}
    J'ai tenté plusieurs choses dans les parenthèse comme par exemple de nouveau l'expression régulière "\\s" ou encore une chaîne vide mais rien n'y fait !

  2. #2
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    salut,
    il suffit de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class ParserUtils {
    	public static List<String> getFields(List<String> rawLines){
    		 
    		List<String> allFields = new ArrayList<String>();
     
    		for(String line : rawLines){
     
    			String[] fields = line.split("\\s+");
     
    			for(String field : fields){
     
    				allFields.add(field);
     
    			}
     
    		}
     
    		return allFields;
     
    	}
     
    }
    eric

  3. #3
    Membre averti
    Avatar de smarlytomtom
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2014
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 139
    Points : 373
    Points
    373
    Billets dans le blog
    1
    Par défaut
    jeffray03 tu es mon héro !
    c'est exactement ce que je voulais et ça marche nikel !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/12/2013, 19h03
  2. Réponses: 2
    Dernier message: 22/04/2006, 18h05
  3. Réponses: 3
    Dernier message: 16/03/2006, 16h44
  4. chaîne de caractère avec '#'
    Par nicoaix dans le forum Langage
    Réponses: 3
    Dernier message: 09/03/2006, 15h10
  5. [RegEx] chaîne de caractères avec caractères spéciaux
    Par Kerod dans le forum Langage
    Réponses: 9
    Dernier message: 25/12/2005, 01h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo