2014-12-22 2 views
0

$으로 시작하는 String의 부분을 교체하려고합니다. (저는 수동으로 String의 매개 변수를 사용합니다), 어떤 이유로 그것이 실패합니다. 여기에 내가 가진 무엇 :String replace() 메서드의 문제

public void sendNotificationOfAcceptedMeeting(String candidateName, DateTime dateTime) { 
     Map<String,String> params = new HashMap<String,String>(); 
     params.put("date", dateTime.toString(DATETIME_FORMAT)); 
     params.put("candidate", candidateName); 
     sendEmailWithTemplate(TEMPLATE_ALL_ACCEPTED, params); 
    } 

다음 : 마지막으로

private void sendEmailWithTemplate(String templateName, Map<String, String> params) { 
    EmailTemplate template = emailTemplateDao.getEmailTemplate(templateName); 
    String subject = applyTemplateParameters(template.getSubject(), params); 
    String body = applyTemplateParameters(template.getTetxBody(), params); 
    sendEmail(subject, body); 
} 

과 : 당신은 아마 생각으로

private String applyTemplateParameters(String templateText, Map<String, String> params) { 
    String toReturn = templateText; 
    if (params != null) { 
     System.out.println("map size: " + params.size()); 
     for (Entry<String, String> entry : params.entrySet()) { 
      System.out.println("********************"); 
      System.out.println(toReturn + " ***BEFORE"); 
      toReturn.replace("$" + entry.getKey(), entry.getValue()); 
      System.out.println("$" + entry.getKey() + " ***KEY"); 
      System.out.println(entry.getValue() + " ***VALUE"); 
      System.out.println(toReturn + " AFTER"); 
     } 
    } 
    return toReturn; 
} 

, 두 번째 방법은 내가 수정할 문자열로 세 번째 방법을 호출 매개 변수와 그 값의 맵. 세 번째 방법 인쇄의 sysouts 그러나

The meeting request at $date with $candidate was accepted by all interviewers. 

: 명확하게 매개 변수를 대체하지 않습니다 보여줍니다

map size: 2 
******************** 
The meeting request at $date with $candidate was 
accepted by all interviewers. ***BEFORE 
$candidate ***KEY 
Acceeedsasd Stetfghfghasd ***VALUE 
The meeting request at $date with $candidate was 
accepted by all interviewers. AFTER 
******************** 
The meeting request at $date with $candidate was 
accepted by all interviewers. ***BEFORE 
$date ***KEY 
27/12/2014 8:00 ***VALUE 
The meeting request at $date with $candidate was 
accepted by all interviewers. AFTER 

... 나는 어쩌면 $ 휴식 생각 두 번째 방법에 template 문자열의 vlue을 설정 그것 (정규식)하지만 replace(), replaceAll()과 달리 문자열 - 정규식이 아닙니다. 나는 아이디어가 없어, 어떤 도움을 주셔서 감사합니다.

답변

3

당신은이 작업을 수행해야한다 :

toReturn = toReturn.replace("$" + entry.getKey(), entry.getValue()); 

을 다음 toReturn의 값을 출력

+1

문자열의 불변 ... 지금은 바보가 된 기분하지 마십시오, 불변 대체하지 못할 ..? 고맙습니다! – Lucas

+0

:) .. Atleast 당신은 대답을 가지고 있습니다. –

1

이 좋아요 "\ 0024"

와 코드에서 "$"를 대체하십시오 :

toReturn = toReturn.replace ("\ 0024"+ entry.getKey(), entry.getValue());

+0

제가 말했듯이, replace는 문자열을 입력이 아닌 정규식으로 취하기 때문에 $는 문제가 아닙니다. 시도해 줘서 고마워 :) – Lucas

1

replace 메서드가 String을 반환하고 이것이 사용되지 않는 것이 문제입니다. 아래에서 결과를 replacedText에 넣었습니다.

String replacedText = toReturn.replace("$" + entry.getKey(), entry.getValue()); 
System.out.println("$" + entry.getKey() + " ***KEY"); 
System.out.println(entry.getValue() + " ***VALUE"); 
System.out.println(replacedText+ " AFTER"); 
1

문자열 은

toReturn = toReturn.replace("$...","")