Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Remplacement d'un mot par le renvoi d'une fonction dans un string [ Algorithme / Compression, Split et Cryptage ] (tenev911)

mercredi 13 août 2008 à 23:44:34 | Remplacement d'un mot par le renvoi d'une fonction dans un string

tenev911

Bonjour,

J'ai un problème plutot génant, j'ai posté ce sujet sur developpez.com sans grand résultat, j'aurai surement plus de chance ici :)

J'ai actuellement un String (Qui est le contenu d'un fichier CSS) et j'aimerai remplacer les couleurs qui sont à l'intérieur.

Je m'explique, j'ai une fonction (methode statique) "conversion(String str)" qui prend une couleur sous la forme "#FF0000" et la transforme pour donner une autre couleur (Par exemple "#008E45").

J'aimerai que toutes les occurrences dans mon fichier CSS ayant comme schéma "#XXXXXX" se transforme en conversion("#XXXXXX");

Pour cela j'ai essayé ceci :

[code]
str = str.replaceAll("#{1}.{6}", conversion("$0"));
[/code]

Bon, mon expression regex n'est pas parfaite (Elle cherche tout ce qui contient # et possède 6 caractères après), ça je pourrai l'arranger.

Le problème, c'est que conversion("$0") où $0 devrait représenter mon #XXXXXX, envoie juste "$0" à ma methode conversion(), donc forcément, j'ai une erreur.

Je voulais juste savoir comment passer de "#XXXXXX" à conversion("#XXXXXX");
Sachant que XXXXXX peut etre n'importe quoi.

Il y a peut être une solution avec les Pattern et les Matcher, mais je ne l'ai pas très bien compris.

Merci beaucoup pour votre aide ;)

PS : Mon fichier doit faire dans les 1000-2000 lignes, devrait-je tout mettre dans un buffer ?

jeudi 14 août 2008 à 01:29:36 | Re : Remplacement d'un mot par le renvoi d'une fonction dans un string

Chatbour

Membre Club
Réponse acceptée !
Salut,


ça ne doit pas fonctionner bien sûr : $0 n'est ici qu'une String et n'a pas le même sens qu'en script shell..

Voici un essai que j'ai fais à la volée peut être que c'est que tu cherches :

import java.util.Vector;

class Tester {
    // Un exemple de ta méthode conversion
    public static String conversion(String str) {
        return str.replace("5", "0");
    }

    // Méthode qui retourne les positions des couleurs dans une chaine
    public static int[] getColorsPositions(String str) {
        Vector<Integer> vect = new Vector<Integer>();
        for (int i=0; i<str.length(); i++) {
            if (str.charAt(i) == '#') {
                vect.addElement(i);
            }
        }

        int tab[] = new int[vect.size()];
        for (int i=0; i<vect.size(); i++) {
            tab[i] = vect.get(i);
        }

        vect = null;

        return tab;
    }


    public static void main(String[] args) {
        // Un exemple pour le test
        String str = "les couleurs rouge = #123456 et noir =#987654.";

        // On traite str couleur par couleur
        for (int index : getColorsPositions(str)) {
            String sub_str = str.substring(index, index + 7);
            if (sub_str.matches("#{1}.{6}")) {
                str = str.replaceAll(sub_str, conversion(sub_str));
            }
        }

        // Affichage après les modifications
        System.out.println(str);
    }
}



pourvu que cela t'aide <




_____________________
Vos avis et critiques sur le livre "Objets réactifs en java" de Frédéric Boussinot : contactez moi par MP..
[ Lien ]

jeudi 14 août 2008 à 03:58:36 | Re : Remplacement d'un mot par le renvoi d'une fonction dans un string

tenev911

Rah, maintenant que j'ai une réponse je n'ai pas accès à mon ordinateur ^^

J'ai regardé ton code et ca me parrait tout à fait correct.

Tu es mon sauveur, merci :)

Problème résolu !

jeudi 14 août 2008 à 10:05:06 | Re : Remplacement d'un mot par le renvoi d'une fonction dans un string

Liverion

Sinon avec ta fonction, je sais pas si ca pourrait fonctionner, mais quelque chose comme :
str = str.replaceAll("#{1}.{6}",  "conversion(\"" + $0 + "\")" );

Le "je sais pas si ca pourrait fonctionner" fait reference au "$0", je sais pas trop si tu recupere bien le premier argument de la fonction courant avec ^^

~~
Les trois lois de Codes-Sources :
Loi 1) Tu lis et respectes le reglement
Loi 2) Tu penses à valider si une reponse apportée à ton problème t'a aidé
Loi 3) Si tu ne respectes pas les 2 premières ....TU SORS !!

jeudi 14 août 2008 à 13:01:15 | Re : Remplacement d'un mot par le renvoi d'une fonction dans un string

Chatbour

Membre Club
Réponse acceptée !
Re,

voilà comment je procède : je récupère d'abord les positions de tous les caractères '#' dans un tableau tab (méthode getColorsPositions()), par la suite, je peux récupérer facilement les codes couleurs en parcourant tab (chaque code couleur est subsbtring(tab[i], tab[i] + 7))..

j'espère avoir été assez clair.. n'hésites pas à reposter s'il y a des questions..



_____________________
Vos avis et critiques sur le livre "Objets réactifs en java" de Frédéric Boussinot : contactez moi par MP..
[ Lien ]

jeudi 14 août 2008 à 14:00:18 | Re : Remplacement d'un mot par le renvoi d'une fonction dans un string

tenev911

Oui, j'avais compris comment ça marchais mais je me demandais comment faire ce que tu as fait (Je me voyais déjà utiliser une classe Scanner pour parcourir toutes les lignes une a une et remplacer les lignes ayant un #xxxxxx, etc...)

Grâce a toi, j'ai un code très correct et simple, encore merci :)

Liverion, merci mais ça ne marche pas ^^

jeudi 14 août 2008 à 15:33:46 | Re : Remplacement d'un mot par le renvoi d'une fonction dans un string

tenev911

Réponse acceptée !
Rebonjour !
Excusez moi de vous déranger mais j'ai remarqué que si j'ai deux #FF0000, le programme va transformer les deux #FF0000 en #123456 (J'ai mis un nombre au pif pour l'exemple) et qu'ensuite le deuxième #FF0000 qui a été transformé en #123456 se retransforme a son tour en #098765 !
Pour éviter cela, plutôt que de faire :

str = str.replaceAll(sub_str, conversion(sub_str));

Il faut faire :

str = str.replaceFirst(sub_str, conversion(sub_str));

Comme ça, dès que le premier #FF0000 est transformé en #123456, le deuxième #FF0000 devient instantanément le premier, et sera concerné par replaceFirst !

Merci beaucoup en tout cas, ça marche !

jeudi 14 août 2008 à 16:00:44 | Re : Remplacement d'un mot par le renvoi d'une fonction dans un string

Chatbour

Membre Club
merci pour le retour

_____________________
Vos avis et critiques sur le livre "Objets réactifs en java" de Frédéric Boussinot : contactez moi par MP..
[ Lien ]



Cette discussion est classé dans : fichier, fonction, string, conversion, xxxxxx


Répondre à ce message

Sujets en rapport avec ce message

conversion string vers string[] [ par ikbpresident84 ] et c est encore moi qui a des heure tardive de la nuit ne trouve plus les solutions les plus simple.....bref si quelqu un pouvais me dire comment tran [interface graphique ][thread] [ par perechev ] Salut, voila j'ai deux petits problemes. 1) Dans un fichier, je fais appel à la fonction Fenetrechoix fonc = new Fenetrechoix(); fonc.show(); cet Conversion String / Int [ par Skeetle ] J'ai un petit soucis, je cherche desespérément à convertir une String en entier...Je m'expliqueDans le code " String toto = "2"; ", je veux pouvoir SUN minor code: 202 [ par vinvay ] J'utilise CORBA pour mon "Application de transfert de fichiers avec CORBA" (http://www.javafr.com/code.aspx?ID=21616).J'ai voulu ajouter une fonction [debutant][pb conversion]String-->Long? [ par bidani ] salut,je recupere une valeur dans un JtextField et je veux laconvertir en type Long comment fait on?merci conversion de string a int [ par youess81 ] slt j ai une zone de saisie qui retourne un string et je veux la convertir en int Fonction java de conversion de UTF-16 à UTF-8 ? [ par Cako19 ] Bonjour,J'aurais besoin de convertir une chaine de caracteres de l'encoding UTF-16 à UTF-8.Quelqu'un saurait si une fonction java existe pour effectue <<no stack trace available>> après lecture d'un très gros fichier [ par Sarah_tn ] Bonjour à tous !!!Désolée si le sujet est redondant, mais je n'ai pas trouvé mon bonheur dans le forum (et sur le net, évidement).Voila mon problème : paramètres d'une fonction [ par guipo ] Je ne sais pas comment faire pour que ma fonction retourne un paramètre (comme avec "return" en c)Ma déclaration est la suivante : public String ReadC Re : paramètre d'une fonction [ par guipo ] Suite à mon problème de renvoie de paramètre de ma méthode, j'ai essayé return mais j'ai un pb :erreur java : "missing return statement"bout de code


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.