How to replace tokens in java using regex? -


i having string template containing $variables needs replaced.

string template: "hi name $name.\ni $age old. $sex"

the solution tried verifying not work in java program. http://regexr.com/3dtq1

further, referred https://www.regex101.com/ not check if pattern works java. but, while going through 1 of tutorials found "$ matches end of line". what's best way replace tokens in template variables?

import java.util.hashmap; import java.util.map; import java.util.regex.matcher; import java.util.regex.pattern;  public class patterncompiler {     static string text = "hi name $name.\ni $age old. $sex";     static map<string,string> replacements = new hashmap<string,string>();     static pattern pattern = pattern.compile("\\$\\w+");     static matcher matcher = pattern.matcher(text);      public static void main(string[] args) {          replacements.put("name", "kumar");         replacements.put("age", "26");         replacements.put("sex", "male");          stringbuffer buffer = new stringbuffer();          while (matcher.find()) {             string replacement = replacements.get(matcher.group(1));             if (replacement != null) {                 // matcher.appendreplacement(buffer, replacement);                 // see comment                  matcher.appendreplacement(buffer, "");                 buffer.append(replacement);             }         }         matcher.appendtail(buffer);         system.out.println(buffer.tostring());       }  } 

you using matcher.group(1) didn't define group in regexp (( )), can use group() whole matched string, want.

replace line:

string replacement = replacements.get(matcher.group(1)); 

with:

string replacement = replacements.get(matcher.group().substring(1)); 

notice substring, map contains words, matcher match $, need search in map "$age".substring(1)" replacement on whole $age.


Comments