文字列内の変数をそれらの値で置き換える方法を探しています。これが私の文字列そっくりです:
"cp $myfile1 $myfile2"
実際、私はjavadocを見て、Stringクラスのsplit()メソッドを使用できるようですが、これは良いことですが、すべての変数を正規表現とreplaceAll()に置き換えることができると思われる記事も見ました。方法。残念ながら、最後の解決策の例は見つかりませんでした。
私の場合(例を使用して)replaceAllを使用することは可能ですか?
いいえ、この場合は使用できません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
(ここから適応:一度に複数の部分文字列を置き換えます)
私は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);