Strings trong Java là không thay đổi, mà làm này hơi phức tạp nếu bạn đang nói về một số bất kỳ điều bạn cần tìm và thay thế.
Cụ thể bạn cần xác định thay thế của bạn trong một Map
, sử dụng một StringBuffer
và appendReplacements()
và appendTail()
phương pháp từ Matcher
. Kết quả cuối cùng sẽ được lưu trữ trong số StringBuffer
của bạn.
Map<String, String> replacements = new HashMap<String, String>() {{
put("${env1}", "1");
put("${env2}", "2");
put("${env3}", "3");
}};
String line ="${env1}sojods${env2}${env3}";
String rx = "(\\$\\{[^}]+\\})";
StringBuffer sb = new StringBuffer();
Pattern p = Pattern.compile(rx);
Matcher m = p.matcher(line);
while (m.find())
{
// Avoids throwing a NullPointerException in the case that you
// Don't have a replacement defined in the map for the match
String repString = replacements.get(m.group(1));
if (repString != null)
m.appendReplacement(sb, repString);
}
m.appendTail(sb);
System.out.println(sb.toString());
Output:
1sojods23
Nguồn
2012-03-07 17:15:38
Ví dụ của bạn đề xuất mẫu phải là '$ {[^}] +}' hoặc tương tự thay vì '$ {\\.}'. –
Mục đích là thu gọn 'envN' xuống 'N' hay để thay thế 'envN' bằng giá trị được gán cho envN trong thuộc tính môi trường/hệ thống? –