String replacement in java, similar to a velocity template
Use StringSubstitutor
from Apache Commons Text.
Dependency import
Import the Apache commons text dependency using maven as bellow:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.10.0</version>
</dependency>
Example
Map<String, String> valuesMap = new HashMap<String, String>();
valuesMap.put("animal", "quick brown fox");
valuesMap.put("target", "lazy dog");
String templateString = "The ${animal} jumped over the ${target}.";
StringSubstitutor sub = new StringSubstitutor(valuesMap);
String resolvedString = sub.replace(templateString);
Replace only part of a string with velocity
The $test.something
is causing the problem.
It is expecting a variable something
inside the object test
.
Use ${test}.something
instead...
--Cheers, Jay
How to replace a query string in an Apache Velocity template?
I managed to fix the issue myself - it turned out that there was another file (which gets called on every page) in which the $!request.getParameter('freeText')" variable is used. I have updated that file so that it uses the new $!replacedQueryString variable (ie the one with the JavaScript stripped out) instead of the existing "$!request.getParameter('freeText')" variable. This now prevents the JavaScript from being executed on every page.
So, this is the final working code in the header Velocity file:
#set($freeTextParameter = "$!m.request.httpRequest.getParameter('freeText')")
#if($freeTextParameter)
#set($replacedQueryString = "$freeTextParameter.replace('confirm','').replace('<','').replace('>','').replace('(','').replace(')','').replace(';','').replace('/','').replace('\"','').replace('&','').replace('+','').replace('script','').replace('prompt','').replace('*','').replace('.','')")
#end
String replacement in java, similar to a velocity template
Use StringSubstitutor
from Apache Commons Text.
Dependency import
Import the Apache commons text dependency using maven as bellow:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.10.0</version>
</dependency>
Example
Map<String, String> valuesMap = new HashMap<String, String>();
valuesMap.put("animal", "quick brown fox");
valuesMap.put("target", "lazy dog");
String templateString = "The ${animal} jumped over the ${target}.";
StringSubstitutor sub = new StringSubstitutor(valuesMap);
String resolvedString = sub.replace(templateString);
How to replace a set of tokens in a Java String?
The most efficient way would be using a matcher to continually find the expressions and replace them, then append the text to a string builder:
Pattern pattern = Pattern.compile("\\[(.+?)\\]");
Matcher matcher = pattern.matcher(text);
HashMap<String,String> replacements = new HashMap<String,String>();
//populate the replacements map ...
StringBuilder builder = new StringBuilder();
int i = 0;
while (matcher.find()) {
String replacement = replacements.get(matcher.group(1));
builder.append(text.substring(i, matcher.start()));
if (replacement == null)
builder.append(matcher.group(0));
else
builder.append(replacement);
i = matcher.end();
}
builder.append(text.substring(i, text.length()));
return builder.toString();
Python string 'Template' equivalent in java
String s = String.format("%s likes %s", "tim", "kung pao");
or
System.out.printf("%s likes %s", "tim", "kung pao");
you can easily do the templating with this too.
String s = "%s likes %s";
String.format(s, "tim", "kung pao");
Related Topics
When to Use an Assertion and When to Use an Exception
Read Error Response Body in Java
Add Multiple Items to an Already Initialized Arraylist in Java
Difference Between Jvm's Lookupswitch and Tableswitch
Accessing Constructor of an Anonymous Class
String Array Initialization in Java
Displaying Fancy Equations with Java
Java 8 Lambda Expression and First-Class Values
Specific Difference Between Bufferedreader and Filereader
Installing Java on Os X 10.9 (Mavericks)
Javamail Could Not Convert Socket to Tls Gmail
How to Convert Iterable to Collection
File Path Windows Format to Java Format
How to Disable the Default Console Handler, While Using the Java Logging API