สิ่งต่อไปนี้จะแทนที่ตัวแปรของฟอร์ม<<VAR>>
ด้วยค่าที่ค้นหาจากแผนที่ คุณสามารถทดสอบออนไลน์ได้ที่นี่
ตัวอย่างเช่นด้วยสตริงอินพุตต่อไปนี้
BMI=(<<Weight>>/(<<Height>>*<<Height>>)) * 70
Hi there <<Weight>> was here
และค่าตัวแปรต่อไปนี้
Weight, 42
Height, HEIGHT 51
ผลลัพธ์ดังต่อไปนี้
BMI=(42/(HEIGHT 51*HEIGHT 51)) * 70
Hi there 42 was here
นี่คือรหัส
static Pattern pattern = Pattern.compile("<<([a-z][a-z0-9]*)>>", Pattern.CASE_INSENSITIVE);
public static String replaceVarsWithValues(String message, Map<String,String> varValues) {
try {
StringBuffer newStr = new StringBuffer(message);
int lenDiff = 0;
Matcher m = pattern.matcher(message);
while (m.find()) {
String fullText = m.group(0);
String keyName = m.group(1);
String newValue = varValues.get(keyName)+"";
String replacementText = newValue;
newStr = newStr.replace(m.start() - lenDiff, m.end() - lenDiff, replacementText);
lenDiff += fullText.length() - replacementText.length();
}
return newStr.toString();
} catch (Exception e) {
return message;
}
}
public static void main(String args[]) throws Exception {
String testString = "BMI=(<<Weight>>/(<<Height>>*<<Height>>)) * 70\n\nHi there <<Weight>> was here";
HashMap<String,String> values = new HashMap<>();
values.put("Weight", "42");
values.put("Height", "HEIGHT 51");
System.out.println(replaceVarsWithValues(testString, values));
}
และแม้ว่าจะไม่ได้ร้องขอ แต่คุณสามารถใช้วิธีการที่คล้ายกันเพื่อแทนที่ตัวแปรในสตริงด้วยคุณสมบัติจากไฟล์ application.properties ของคุณแม้ว่าสิ่งนี้อาจดำเนินการไปแล้ว:
private static Pattern patternMatchForProperties =
Pattern.compile("[$][{]([.a-z0-9_]*)[}]", Pattern.CASE_INSENSITIVE);
protected String replaceVarsWithProperties(String message) {
try {
StringBuffer newStr = new StringBuffer(message);
int lenDiff = 0;
Matcher m = patternMatchForProperties.matcher(message);
while (m.find()) {
String fullText = m.group(0);
String keyName = m.group(1);
String newValue = System.getProperty(keyName);
String replacementText = newValue;
newStr = newStr.replace(m.start() - lenDiff, m.end() - lenDiff, replacementText);
lenDiff += fullText.length() - replacementText.length();
}
return newStr.toString();
} catch (Exception e) {
return message;
}
}