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 :

Opération sur chaînes de caractères


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Par défaut Opération sur chaînes de caractères
    Bonjour,

    j'ai UNE chaîne de caractère contient des chiffres codée sous un format littéraire
    je veux convertir la chaîne caractère a son équivalant en format numérique
    exemple
    Input:

    undeuxquatre;unzerodeuxquatre;deuxdeuxsix;undeuxhuit;deuxcinqsix

    Output:

    undeuxquatre,124
    unzerodeuxquatre,1024
    deuxdeuxsix,226
    undeuxhuit,128
    deuxcinqsix,256

    merci de m'avoire aider

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    je veux couverture la chaîne caractère
    Couverture la chaine, bon ca -> convertir j'imagine

    Mis a part cette mauvaise blague:

    Il te faudrait un tableau avec tout les string ("un", "deux", "trois", ...)

    et faire une boucle sur la chaine a étudier avec un index que tu avancerais dés que le morceau que tu test startWith() un des elements du tableau et ainsi de suite...

    Bref un truc du genre ceci, mais c'est encore te mâcher le travail...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    String vars [] = {"un","deux","trois"};
    		String sentence = "untroisdeuxununun";
    		for (int i = 0; i < sentence.length(); i++) {
    			for (int j = 0; j < vars.length; j++) {
    				if (sentence.substring(i).startsWith(vars[j])==true)
    				{
    					System.err.println("-->"+vars[j]);
    					i+=vars[j].length()-1;
    				}
    			}
    		}
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Ou plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s = s.replaceAll("un","1");
    Et ainsi de suite pour chaque chiffre.

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Bien vu Mathieu, maintenant il faudrait comparer la vitesse d'exécution des 2 codes sur divers cas histoire de choisir le plus rapide
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par Mathieu.J Voir le message
    Ou plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s = s.replaceAll("un","1");
    Et ainsi de suite pour chaque chiffre.
    Dans ce cas, et vu que les expressions régulières ne sont pas utilisées, il faut mieux privilégier la méthode replace(java.lang.CharSequence, java.lang.CharSequence) plutôt que replaceAll.

    Elle est sensiblement plus rapide vu qu'il n'y a pas d'expression régulière à compiler.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    s = s.replace("un","1");

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    J'avais toujours pensé que replace ne changeait que le premier rencontré...

    Bien vu

  7. #7
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Le replaceAll ou le replace est ultra lent entres nous ...

    Mais peut etre mon exemple n'est pas le meilleur (oui ce benchmark est un peu simpliste en utilisant qu'une seul phrase d'entrée) mais voici un mini benchmark ma méthode vs replace

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
     
    /**
     * @author user
     *
     */
    public class Snippet
    {
     
    	String sentence = "untroisdeuxunununquatreneuftroisdeuxununcinquncinqquatre";
     
    	public static void main(String args[]) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException
    	{
     
     
    		new Snippet();
     
    	}
     
    	public Snippet() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException
    	{
     
    		bench_(Snippet.class.getMethod("method_1", String.class));
    		bench_(Snippet.class.getMethod("method_2", String.class));
    		bench_(Snippet.class.getMethod("method_1", String.class));
    		bench_(Snippet.class.getMethod("method_2", String.class));
    		bench_(Snippet.class.getMethod("method_2", String.class));
    		bench_(Snippet.class.getMethod("method_1", String.class));
    	}
     
    	/**
             * @param method
             * @throws InvocationTargetException 
             * @throws IllegalArgumentException 
             * @throws IllegalAccessException 
             */
    	private void bench_(Method method) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException
    	{
    		long start = System.currentTimeMillis();
    		for (int i = 0; i < 50000; i++)
    		{
    			String retour = (String) method.invoke(this, sentence);
    			//System.err.println("Retour = "+retour.toString());
    		}
     
    		long stop = System.currentTimeMillis();
    		long elapsed = stop-start;
    		System.err.println("Elapsed for method "+method.getName()+ " : "+elapsed+ " ms");
     
    	}
     
    	public String method_1(String sentence)
    	{
    		String vars [] = {"un","deux","trois","quatre", "cinq", "six", "sept", "huit", "neuf"};
    		String vars2 [] = {"1","2","3","4", "5", "6", "7", "8", "9"};
     
    		String finalSent = "";
     
    		for (int i = 0; i < sentence.length(); i++) {
    			for (int j = 0; j < vars.length; j++) {
    				if (sentence.substring(i).startsWith(vars[j])==true)
    				{
    					//System.err.println("-->"+vars[j]);
    					finalSent+=vars2[j]+";";
    					i+=vars[j].length()-1;
    				}
    			}
    		}
    		return finalSent;
    	}
     
    	public String method_2(String sentence)
    	{
    		String vars1 [] = {"un","deux","trois","quatre", "cinq", "six", "sept", "huit", "neuf"};
    		String vars2 [] = {"1","2","3","4", "5", "6", "7", "8", "9"};
     
    		for (int i = 0; i < vars2.length; i++)
    		{
    			sentence=sentence.replace(vars1[i], vars2[i]);
    		}
    		return sentence;
    	}
    }
    Je pense même qu'en réécrivant un algorithme maison ca ira encore plus vite que mon code initial.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    De toute facon, la question d'origine ressemble plus à un exercice d'algorithmie qu'à un souci dans un batch haute performance. Donc l'ensemble des solutions proposées devraient convenir.

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

Discussions similaires

  1. Opération sur chaînes de caractères
    Par Allan007 dans le forum VB.NET
    Réponses: 6
    Dernier message: 19/01/2012, 10h16
  2. opération sur chaine de caractères
    Par Matmal11 dans le forum Linux
    Réponses: 4
    Dernier message: 31/01/2007, 11h47
  3. [Requêtes] opérations sur chaînes de caractères
    Par guyom_ dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 18/12/2006, 11h47
  4. [Tableaux] Opération sur chaîne de caractères
    Par kespy13 dans le forum Langage
    Réponses: 3
    Dernier message: 19/04/2006, 14h32

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