我正在为一个项目开发一个小型Java程序,它使用JavaMail从指定的URI中提取用户的收件箱,然后开始处理这些消息。
在Outlook中,属性菜单中有一个功能可以设置消息的到期日期,这会添加(例如):
到期日:2010年1月14日星期四17:00:00 -0000
到邮件标题。
使用javax.mail.Message中的getHeader(String header)方法从电子邮件头中检索它很简单,它返回一个String [],其中恰好是冒号之后的部分,由空格标记。 / p>
我想要做的是将此String []转换为单个String,以后再生成Date。所以建立一个简单的foreach循环如下:
String date = "";
for(String part : header){
date.concat(part);
}
System.out.println(date);
现在由于某种原因,这段代码返回一个空字符串,并不完全确定原因,因为这应该是有效的Java。
但是,以下代码确实有效,我不知道为什么,因为它对我来说似乎不合逻辑
String date = "";
for(String part : header){
date = date + part;
}
System.out.println(date);
打印出正确的日期。有人能告诉我这是否是正确的方法,如果没有,concat(String append)方法出了什么问题?
TIA,
JimiF
答案 0 :(得分:3)
String
是不可变的。它的内部结构永远不会从外部改变(抛开反射)。根据API文档,String#concat()
返回包含连接部分的新String
,但您忽略了它。您需要掌握它并继续在循环中使用它:
String date = "";
for(String part : header){
date = date.concat(part);
}
System.out.println(date);
那就是说,你的第二个例子也可以缩短为:
String date = "";
for(String part : header){
date += part;
}
System.out.println(date);
反过来说,在现实世界中,你想使用StringBuilder
来保存内存,因为如果你这样做,在循环中构建一个新的String
并不便宜经常:
StringBuilder date = new StringBuilder();
for(String part : header){
date.append(part);
}
System.out.println(date.toString());