date = date + partie par rapport à date.concat (partie)

voix
1

J'ai un petit programme Java que je développe un projet qui tire d'un URI spécifié la boîte de réception d'un utilisateur en utilisant JavaMail, puis commence le traitement des messages.

Dans Outlook, il y a une fonction dans le menu des propriétés pour définir une date d'expiration pour le message, ce qui ajoute (par exemple):

Expiration-Date: Jeu 14 Jan 2010 17:00:00 -0000

Pour l'en-tête du message.

Récupération qu'à partir de l'en-tête de courrier électronique est simple en utilisant la méthode getHeader (en-tête de chaîne) de javax.mail.Message, et il renvoie un String [], dans laquelle se trouve être la partie après la virgule, en jetons par des espaces.

Ce que je veux faire est de faire de cette chaîne [] en une seule chaîne, pour faire plus tard dans une date. Donc, configurer une simple boucle foreach comme suit:

String date = ;
for(String part : header){
  date.concat(part);
}
System.out.println(date);

Maintenant, pour une raison quelconque, ce code renvoie une chaîne vide, pas tout à fait sûr pourquoi, comme cela devrait être valide Java.

Cependant, le code suivant fonctionne, et je ne sais pas pourquoi, car il semble illogique de me

String date = ;
for(String part : header){
   date = date + part;
}
System.out.println(date);

Ce qui imprime la date correcte. Quelqu'un peut-il me dire si cela est la bonne façon de le faire, et sinon, ce qui ne va pas avec la méthode concat (String append)?

TIA,

JimiF

Créé 15/01/2010 à 01:44
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
3

Stringest immuable. Ses internes ne seront jamais changé de l' extérieur ( en laissant de côté la réflexion). Selon la documentation de l' API, les retours une nouvelle contenant les parties concatenatred, mais vous l' ignorer. Vous devez obtenir une poignée de celui - ci et continuer à l' utiliser dans la boucle:String#concat() String

String date = "";
for(String part : header){
    date = date.concat(part);
}
System.out.println(date);

Cela dit, votre deuxième exemple peut également être réduite à:

String date = "";
for(String part : header){
    date += part;
}
System.out.println(date);

Cela dit à son tour, dans le monde réel que vous souhaitez utiliser StringBuilderpour cette option pour enregistrer la mémoire, car la construction d' une nouvelle Stringdans une boucle est pas pas cher si vous faites cela trop souvent:

StringBuilder date = new StringBuilder();
for(String part : header){
    date.append(part);
}
System.out.println(date.toString());
Créé 15/01/2010 à 01:58
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more