2010-01-15 5 views
1

JavaMail을 사용하여 지정된 URI에서 사용자의받은 편지함을 가져 오는 프로젝트 용으로 개발중인 작은 Java 프로그램이 있습니다. 메시지.date = part + date.concat (part)

만기 날짜 : 2010년 1월 14일 (목) 17시 0분 0초 -0000

Outlook의

, (예를 들어) 추가하는 메시지에 대한 유효 기간을 설정하는 속성 메뉴에서 함수가있다

메시지 헤더에.

이메일 머리글에서 가져 오는 것은 javax.mail.Message의 getHeader (String header) 메소드를 사용하면 간단하며 콜론 뒤에 공백으로 토큰 화되는 String []을 반환합니다.

내가 원하는 것은 나중에 [Date]를 만들기 위해이 String []을 단일 문자열로 만드는 것입니다. 다음과 같이 그래서 간단한 foreach 루프를 설정 :

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

지금 어떤 이유로,이 코드는 빈 문자열 완전히 확실하지를 반환 왜이 유효 자바해야한다.

그러나, 다음 코드는 작업을 수행하고, 올바른 날짜를 출력 어느 날

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

에 안맞아 보인다 나는 이유를 알고하지 않습니다. 누군가가 이것이 올바른 방법인지 알려주고, 그렇지 않다면, concat (String append) 메서드에 어떤 문제가 있습니까?

TIA,

JimiF

답변

3

String는 불변이다. 그 내부는 절대로 바깥에서 바뀌지 않을 것입니다. API 문서에 따라 String#concat()이고 연결 부분을 포함하는 새 String을 반환하지만 무시하고있는 것입니다. 현실 세계에서 차례로 말했다

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

그건 :

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

, 두 번째 예는도 단축 할 수있다 : 당신은 그것의 핸들을 얻고 루프에서 계속 사용합니다 StringBuilder``에 대한

StringBuilder date = new StringBuilder(); 
for(String part : header){ 
    date.append(part); 
} 
System.out.println(date.toString()); 
+0

+1 야호 : 당신은 너무 자주 이렇게하면 루프에서 새로운 String을 구성하는 것이 저렴하지 않기 때문에 당신은 메모리를 저장하려면이에 대한 StringBuilder을 사용하고 싶습니다! 'PrintWriter' 메쏘드를 호출하면'toString'을 호출 할 필요가 없습니다; 그것은 당신을 위해 그것을 처리합니다. :-) –

+0

Doh .... 이제 바보 같이 느껴져 .... 지금 내가 뭘 잘못하고 있는지 알 수있어. 도와 주셔서 감사합니다! – JimiF