Tôi sẽ nhận được các chuỗi có chứa các thuộc tính "được định dạng"; tức là, Chuỗi được đóng gói bên trong mã thông báo "$ {" và "}" chuẩn:Tìm kiếm và thay thế các thuộc tính được định dạng bên trong chuỗi Java
"Đây là $ {example} của $ {string} mà tôi có thể là $ {given}".
tôi cũng sẽ có một HashMap<String,String>
thay chứa cho mỗi thể định dạng tài sản:
HashMap Keys HashMapValues
===========================================
bacon eggs
ham salads
Vì vậy mà, với chuỗi sau:
"Tôi thích ăn $ {thịt xông khói} và $ {ham}. "
tôi có thể gửi thông điệp này đến một phương pháp Java mà sẽ biến nó thành: "Tôi thích ăn trứng và salad"
Đây là nỗ lực của tôi tốt nhất:
System.out.println("Starting...");
String regex = "$\\{*\\}";
Map<String,String> map = new HashMap<String, String>();
map.put("bacon", "eggs");
map.put("ham", "salads");
String sampleString = "I like ${bacon} and ${ham}.";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(sampleString);
while(matcher.find()) {
System.out.println("Found " + matcher.group());
// Strip leading "${" and trailing "}" off.
String property = matcher.group();
if(property.startsWith("${"))
property = property.substring(2);
if(property.endsWith("}"))
property = property.substring(0, property.length() - 1);
System.out.println("Before being replaced, property is: " + property);
if(map.containsKey(property))
property = map.get(property);
// Now, not sure how to locate the original property ("${bacon}", etc.)
// inside the sampleString so that I can replace "${bacon}" with
// "eggs".
}
System.out.println("Ending...");
Khi tôi thực hiện điều này, tôi nhận được không có lỗi, nhưng chỉ cần nhìn thấy "Bắt đầu ..." và "Kết thúc ..." đầu ra. Điều này cho tôi biết rằng regex của tôi không chính xác và do đó, Matcher
không thể khớp với bất kỳ thuộc tính nào.
Vì vậy, câu hỏi đầu tiên của tôi là: regex này nên là gì?
Khi tôi đã qua, tôi không chắc chắn cách thực hiện chuỗi thay thế khi tôi đã thay đổi "$ {bacon}" thành "trứng", v.v. Bất kỳ ý tưởng nào? Cảm ơn trước!
Đang cố gắng để giải quyết vấn đề này với RegEx (nếu có thể ở tất cả ...) là một bài tập academical, "trong thực tế thế giới "bạn nên sử dụng động cơ như vd http://freemarker.sourceforge.net –