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 :

Optimisation de remplacement de chaine de carectere


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 135
    Points : 46
    Points
    46
    Par défaut Optimisation de remplacement de chaine de carectere
    Bonjour,

    J'ai une application qui tourne sous java 1.3 en prod et on a des soucis de performence sur une fonction de remplacement de chaine de caracteres.
    Comme je suis en java 1.3 je ne peux pas utiliser la focntion replaceall ni les regexp.

    En gros je voudrais remplacer une chaine de caractere dans un fichier de 8 à 10 Mo.

    J'ai fais une fonction de remplacement mais je ne sais pas si elle est optimisée. Pouvez vous me donner votre avis ?

    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
     
    	/**
            *
            * Retourne la chaîne de caractère identifiée par la clé.
            * 
            * @param xml (flux contenant la chiane de caractere a remplacer.
            * @param oldValue chaine de carectere a remplacer 
            * @param valueToReplace 
            * @return la chaîne associée.
            */
    	public static StringBuffer getString(String xml, String valueToReplace ,String oldValue) {
     
    		System.out.println("Chaine pas encore remplacer : " + xml);
     
    	StringBuffer preparedString = new StringBuffer();
    	StringBuffer value = new StringBuffer(xml);
    	int beginIndex = 0;
    	int endIndex;
    	int i = 0;
    	endIndex = value.toString().indexOf(oldValue, beginIndex);
    	System.out.println("EndIndex " + endIndex);
     
    	if( endIndex == -1 )
    		return value;
    	while (endIndex > 0) {
    	if (i <= valueToReplace.length()) {
    	preparedString.append(value.substring(beginIndex, endIndex));
    	preparedString.append(valueToReplace);
    	i++;
    	beginIndex = endIndex + oldValue.length();
    	endIndex = value.toString().indexOf(oldValue, beginIndex);
    	} else {
    	endIndex = -1;
    	}
    	}
    	return preparedString;
    	}

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Qq chose comme ça :
    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
    	public static StringBuffer getString(String xml, String valueToReplace,
    			String oldValue) {
    		int beginIndex = 0;
    		int endIndex = xml.indexOf(oldValue, beginIndex);
    		if (endIndex == -1) {
    			return new StringBuffer(xml);
    		}
     
    		StringBuffer preparedString = new StringBuffer(xml.length());
    		int lengthOldValue = oldValue.length();
     
    		while (endIndex >= 0) {
    			if (endIndex > beginIndex) {
    				preparedString.append(xml.substring(beginIndex, endIndex));
    			}
    			preparedString.append(valueToReplace);
    			beginIndex = endIndex + lengthOldValue;
    			endIndex = xml.indexOf(oldValue, beginIndex);
    		}
    		if (beginIndex < xml.length()) {
    			preparedString.append(xml.substring(beginIndex));
    		}
    		return preparedString;
    	}

  3. #3
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    plutot que de passer ton fichier sous forme de String, tu pourrais passer un vrai flux ou une url.

    Ca permettrait de lire + générer le StringBuffer à la volé, sans passer par l'etape de l'enorme chaine de caractere (qui contient tout le fichier en gros).

    idem: passer un flux de sortie pour le nouveau fichier, et gagner encore une etape ^^.
    Systèmes d'Informations Géographiques
    - Projets : Unlicense.science - Apache.SIS

    Pour un monde sans BigBrother IxQuick ni censure RSF et Les moutons

Discussions similaires

  1. [Système] Remplacer une chaine par un lien hypertexte
    Par Bisûnûrs dans le forum Langage
    Réponses: 10
    Dernier message: 06/06/2007, 09h34
  2. Réponses: 7
    Dernier message: 27/09/2005, 11h54
  3. Word ole et demande de remplacement de chaine
    Par dd16 dans le forum Langage
    Réponses: 6
    Dernier message: 24/09/2005, 12h56
  4. Réponses: 9
    Dernier message: 31/05/2005, 14h34
  5. Réponses: 4
    Dernier message: 16/04/2004, 16h31

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