Będą podane ciągi zawierające sformatowane "właściwości"; czyli Struny obudowane wewnątrz standardu "$ {" i "}" tokeny:Wyszukaj i zamień sformatowane właściwości wewnątrz łańcucha znaków Java
"Jest to $ {example} z $ {ciąg} abym $ {} podano."
będę mieć także HashMap<String,String>
zawierające podstawienia dla każdej możliwej sformatowanej nieruchomości:
HashMap Keys HashMapValues
===========================================
bacon eggs
ham salads
Tak, że, biorąc pod uwagę następujący ciąg:
„Lubię jeść $ {boczek} i $ {ham}. "
mogę wysłać to do metody Java, która będzie przekształcić go na: "Lubię jeść jajka i sałatki"
Oto moja najlepsza próba:
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...");
Kiedy wykonać to otrzymuję żadnych błędów, ale po prostu zobaczyć "Uruchamianie ..." i "zakończenia ..." wyjścia. To mówi mi, że moje wyrażenie regularne jest niepoprawne, a więc Matcher
nie jest w stanie dopasować żadnych właściwości.
Moje pierwsze pytanie brzmi: co to powinno być?
Kiedy już przeszłam, nie jestem pewien, jak wykonać ciąg zastępowania po zmianie "$ {bacon}" na "jaja" itd. Jakieś pomysły? Z góry dziękuję!
Próbując rozwiązać ten problem z RegEx (jeśli to w ogóle możliwe ...) jest ćwiczeniem akademicki „, w prawdziwym świat "powinieneś używać silnika takiego jak np http://freemarker.sourceforge.net –