我正在寻找一种方法来替换字符串中的变量值。这是我的字符串:
"cp $myfile1 $myfile2"
事实上,我查看了javadoc,似乎我可以使用String类中的split()方法,这很好,但我也看过一篇文章,似乎可以用regex替换所有变量和replaceAll()方法。不幸的是,我没有找到最后一个解决方案的任何例子。
在我的情况下是否可以使用replaceAll(带示例)?
答案 0 :(得分:5)
不,在这种情况下你不能使用String.replaceAll
。 (您可以替换所有$...
子字符串,但每次替换都取决于要替换的实际变量。)
这是一个执行同步替换的示例,它取决于要替换的子字符串:
import java.util.*;
import java.util.regex.*;
class Test {
public static void main(String[] args) {
Map<String, String> variables = new HashMap<String, String>() {{
put("myfile1", "/path/to/file1");
put("myfile2", "/path/to/file2");
}};
String input = "cp $myfile1 $myfile2";
// Create a matcher for pattern $\S+
Matcher m = Pattern.compile("\\$(\\S+)").matcher(input);
StringBuffer sb = new StringBuffer();
while (m.find())
m.appendReplacement(sb, variables.get(m.group(1)));
m.appendTail(sb);
System.out.println(sb.toString());
}
}
<强>输出:强>
cp /path/to/file1 /path/to/file2
答案 1 :(得分:0)
我会坚持使用java并使用
public void replace(String s, String placeholder, String value) {
return s.replace(placeholder, value);
}
您甚至可以使用此方法进行多次替换:
public String replace(String s, Map<String, String> placeholderValueMap) {
Iterator<String> iter = placeholderValueMap.keySet().iterator();
while(iter.hasNext()) {
String key = iter.next();
String value = placeholderValueMap.get(key);
s = s.replace(key, value);
}
return s;
}
您可以像这样使用它:
String yourString = "cp $myfile1 $myfile2";
Map<String, String> placeholderValueMap = new HashMap<String, String>();
placeholderValueMap.put("$myfile1", "fileOne");
placeholderValueMap.put("$myfile2", "fileTwo");
someClass.replace(yourString, placeholderValueMap);