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

avec Java Discussion :

Spliter un message binaire - critère de découpage


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2015
    Messages : 16
    Par défaut Spliter un message binaire - critère de découpage
    Bonjour à tous,

    Voici ce que je souhaite obtenir. En entrée, j'ai un message binaire au format String que je souhaite découper à chaque changement de bit.
    J'ai donc pensé à la méthode split() que je viendrais appliquer à messageBinaire avec pour critère de découpage la détection du schéma "01" ou "10" mais je n'arrive pas à traduire mon critère de découpage en langage JAVA.

    Entrée :
    String messageBinaire = "01000011";

    Découpage :
    String[] sortie = messageBinaire.split(critère de découpage à déterminer);

    Sortie :
    un tableau de String comme suit : sortie = {0,1,0000,11}

    PS : Je prends bien évidemment toutes suggestions mais j'aimerais aussi savoir qu'elle serait l'expression régulière qui me permettrait de faire un découpage lorsque 01 ou 10 est détecté.

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Tu fait une détection de changement d'état basique :

    On suppose que tu as une pile A et une case B ou tu vide les éléments de A.


    Tu prend un élément dans A :
    Si B est rempli avec des éléments différents de l'élément pris. Tu vide B, puis tu ajout ton élément à B.


    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
    		char[] liste = { '0', '0', '1', '1', '1', '0', '1', '0', '1', '0' };
    		String B = "";
    		char inB = ' ';
    		for (char element : liste) {
    			if (inB == ' ') {
    				B = B + element;
    				inB = element;
    			} else {
    				if (inB == element) {
    					B = B + element;
    				} else {
    					System.out.println(B);
    					inB = element;
    					B = String.valueOf(element);
    				}
    			}
    		}
    		System.out.println(B);
    Bien sûr, c'est la version idiote. On devrait utiliser un StringBuilder au minimum et avoir une variable pour contenir le retour au lieu de l'afficher.

    Mais la détection de changement d'état est une conception de base. Tellement basique qu'elle est considéré comme partie intégrante de l’électronique...

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Membre averti
    Femme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2015
    Messages : 16
    Par défaut
    Merci Kolodz pour ta réponse,

    Je vais la tester. Mais n'y a-t-il pas une méthode plus courte que celle-ci basée sur la méthode split et exploitant les expressions régulières ?

  4. #4
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Non, sachant que la méthode slipt supprime le caractère de séparation.
    Et les regex, on ne les utilisent que quand on sait déjà ce qu'on fait. Ce qui n'est pas ton cas.

    Cordialement,
    Patrick Kolodziejczyk.

    EDIT :
    Version Regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	public static void main(String[] args) {
    		String tomatch = "00101100001010000100000010001110";
    		String regex = "(1+)*(0+)*";
    		Pattern pattern = Pattern.compile(regex);
    		Matcher matcher = pattern.matcher(tomatch);
    		while (matcher.find()) {
    			if (matcher.group(1) != null) {
    				System.out.println(matcher.group(1));
    			}
    			if (matcher.group(2) != null) {
    				System.out.println(matcher.group(2));
    			}
    		}
    	}
    Je te dé-conseil de l'utiliser, car c'est du code magico magic pour toi. Je suis sûr que tu es totalement incapable de comprendre ce que fait ce code. Et par conséquence, si tu dois le modifier tu n'y arrivera pas. Et cela ne te fait pas monter en compétence non plus. Cela ne sert à rein d'avoir un morceau de code qu'on ne maitrise pas dans son projet.
    De plus la version "basique" est peut-être un peu plus longue, mais celle-ci est beaucoup moins consommatrice que cela soit en mémoire ou en temps.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  5. #5
    Membre averti
    Femme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2015
    Messages : 16
    Par défaut
    Merci Kolodz pour ta réponse.

    J'ai commencé à me documenter sur les expressions régulières. Donc je suis de plus en plus capable de comprendre ces expressions.
    En fait, j'avais déjà un code (à coups de boucle for et de if mais qui me paraissait très artisanal) qui me donnait le résultat souhaité. Mais pour progresser et apprendre de nouvelles choses, je m'efforce de parvenir au résultat souhaité de diverses manières et je pensais qu'une méthode similaire à split() mais ne supprimant pas les caractères de découpage existait. De même, il faut progressivement mettre les mains dans les expressions régulières pour un jour vraiment les maîtriser.

    @+

  6. #6
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Quand je dis que tu n'as pas les bases, c'est que tu n'as pas les bases algorithmiques.
    Car la fonction qui découpe ta chaîne proprement est en complexité O(n) au mieux. Ce qui est le cas de ce que je t'ai présenté dans mon premier poste.
    Celui-ci nécessite qu'une seule boucle et devrait être à la porter de tout développeur. Si tu n'arrive pas à comprendre ou créer ce genre d'algorithme, tu aura forcement des problèmes lors de l'utilisation des expressions régulières qui demande beaucoup plus de connaissance.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

Discussions similaires

  1. Selectionner un bit dans un message binaire
    Par Leo2b dans le forum Simulink
    Réponses: 1
    Dernier message: 06/04/2011, 10h58
  2. [Découpage chaine String et decalages binaires]
    Par moulefrite dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/12/2008, 15h27
  3. Réponses: 1
    Dernier message: 24/07/2007, 12h10
  4. Shootbox : découpage du message saisi
    Par JmL40 dans le forum Langage
    Réponses: 1
    Dernier message: 29/05/2007, 12h13

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