2008-11-27 5 views
3

Je joue avec Java pour la première fois et je dois pouvoir remplacer certains mots dans un modèle. Exemple de modèle -Comment utiliser Java pour modifier un document modèle (lettre type) à partir d'un fichier?

"Cher PUT_THEIR_NAME_HERE,

Je communique avec vous ..... bla bla bla

Cordialement,

PUT_COMPANY_NAME_HERE"

Quelle est la façon la plus simple (de préférence en utilisant la bibliothèque standard) pour faire une copie de ce fichier modèle et ajouter les mots corrects au bon endroit, puis enregistrez-le dans le système de fichiers? Je dois faire beaucoup de tels modèles simples ainsi un moyen qui peut être facilement reproduit serait gentil.

J'accède également à Java via JavaScript en utilisant Rhino, je ne sais pas si cela fait une différence ou non.

Cordialement,

Chris

+0

Cela devrait être reformulée comme modèle n'est pas neutre mot de la langue cs pov – Gilles

Répondre

-1

Eh bien, la façon la plus simple serait de lire le fichier dans une chaîne, faire un replaceAll (une fois pour chaque mot que vous voulez remplacer) puis écrire le résultat dans un nouveau fichier. Ce n'est pas l'approche la plus efficace, mais cela fonctionne plutôt bien pour des tâches simples.

2

Vraiment simpliste:

Pas de preuve de balle bien sûr.

C:\oreyes\samples\java\replace>type Simplistic.java 
public class Simplistic{ 
    public static void main(String [] args) { 
     String template = "Dear _NAME_HERE_. I'm glad you..."; 
     System.out.println(template.replaceAll("_NAME_HERE_","Oscar Reyes")); 
    } 
} 

C:\oreyes\samples\java\replace>java Simplistic 
Dear Oscar Reyes. I'm glad you... 

Voici le document officiel pour cette méthode si vous voulez étudier plus

http://java.sun.com/javase/6/docs/api/java/lang/String.html#replaceAll(java.lang.String,java.lang.String)

Je suis heureux de vous entendre vous apprenez java!

+0

Assurez-vous que le champ de template n'a pas d'opérateurs regex, template.replace peut être un substitut valide si elle le fait –

+0

Je devrais changer mon nom pour PUT_COMPANY_NAME_HERE.;) –

12

Vous recherchez java.text.MessageFormat:

Voici quelques exemples d'utilisation (de JavaDoc):

Object[] arguments = { 
    new Integer(7), 
    new Date(System.currentTimeMillis()), 
    "a disturbance in the Force" 
}; 

String result = MessageFormat.format(
    "At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.", 
    arguments); 

output: At 12:30 PM on Jul 3, 2053, there was a disturbance 
      in the Force on planet 7. 
5

Pour les fonctionnalités avancées (comme les boucles), vous pouvez utiliser Apache Velocity ou FreeMarker.

+0

Velocity est l'un des le plus agréable d'utiliser des moteurs de templates pour faire autre chose qu'une simple substitution de chaînes de caractères, mais c'est aussi le moteur qui alimente les templates à l'intérieur d'Intellij IDEa. – Aidos

1

La publication la plus cotée actuelle est précise mais pas la plus concise pour utiliser l'API en Java 6. Il n'est pas nécessaire de créer le tableau d'arguments ou explicitement l'entier et le nouveau Date() utilise l'heure actuelle par défaut Chaîne result = MessageFormat.format ("À {1, heure} le {1, date}, il y avait {2} sur la planète {0, nombre, nombre entier}:

», 7, new Date(), « une perturbation dans la force »).

Juste quelques conseils pour rendre votre code plus lisible et plus facile à maintenir

Questions connexes