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

Langage Java Discussion :

Pourquoi le "String" de Java n'a t-il pas une fonction de remplacement de chaines qui marche tout le temps? [FAQ]


Sujet :

Langage Java

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    605
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 605
    Points : 670
    Points
    670
    Par défaut Pourquoi le "String" de Java n'a t-il pas une fonction de remplacement de chaines qui marche tout le temps?
    Bonjour,


    Il arrive quelques fois que les langages les plus aboutis soient brutalement pénibles. Ce n'est pas fréquent avec Java, mais cela arrive parfois.

    replaceFirst et replaceAll sont les deux seules fonctions proposées pour remplacer des chaines de caractères dans des objets String, et lorsqu'on les voit capables de renvoyer un PatternSyntaxException, l'on a compris son malheur. Elles utilisent les expressions régulières.

    Un programme qui s'exécute devra porter mille attentions à ce qu'il veut comparer.
    Par exemple, un $ présent dans la chaine? Un sparadrap "\\$" ou "\\\\\\$" sera requis. Sinon: exception.
    Il existe quantité d'autres règles tirées des expressions régulières.

    Donc, avant de chercher une chaine A dans une chaine B que l'on vous a transmises, vérifiez bien par programme que A ne contient pas ceci, ni B cela. Sinon, tant pis pour vous.

    Vous passerez plus de temps à détecter les formes potentiellement mal interprétables... qu'à faire la recherche que vous vouliez.
    N'est-ce pas à vos yeux un gâchis d'efforts?


    Pourquoi Java n'a t-il pas proposé en plus une série de fonctions qui seraient incapables de rater parce qu'elles se limiteraient à remplacer des occurences de chaine dans une autre chaine, sans chercher à partir dans des exercices de style compliqués qui n'intéressent pas tous les développeurs?

    Etait-il impossible de faire une API simple qui fonctionnait tout le temps?

    Quelle justification ont-il eu d'être passé par le prérequis des expressions régulières pour la moindre recherche dans une chaine?


    Cordialement,

    Grunt.

  2. #2
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 552
    Points : 15 463
    Points
    15 463
    Par défaut
    Pas de panique, la fonction de remplacement sans utiliser les expression rationelles existe bien dans la classe String : c'est replace(CharSequence c1, CharSequence c2).
    Ça ne saute pas forcément à l'œil au premier coup quand on regarde la doc, mais bien la méthode qui t'intéresse, car String implémente l'interface CharSequence.

    A noter que bien que cette méthode ne contienne pas "All" dans son nom, elle remplacera bien toutes les occurrences.

    De plus, saches que l'on peut échapper automatiquement tous les caractères spéciaux des expressions rationnelles avec Pattern.quote("expression a échapper");

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    605
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 605
    Points : 670
    Points
    670
    Par défaut
    Merci beaucoup!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/11/2009, 16h14
  2. ORA-01756: quoted string not properly terminated
    Par hottnikks_79 dans le forum SQL
    Réponses: 14
    Dernier message: 22/05/2007, 13h02

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