2012-05-07 12 views
2

文字列の変数を値で置き換える方法を探しています。ここに私の文字列そっくりです:文字列のJavaパラメータの置換

実際に
"cp $myfile1 $myfile2" 

、私はJavadocを見て、私が良いのですが、私もそれはそれと思われた記事を見てきましたStringクラスからスプリット()メソッドを使うことができたように思い私のすべての変数をregexとreplaceAll()メソッドで置き換えることは可能です。残念ながら、私は最後の解決策の例を見つけませんでした。

私の場合にreplaceAllを使用することはできますか?

答えて

4

いいえ、この場合は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 

(こっちから適応:Replace multiple substrings at once

+0

ありがとうとても!完璧に動作しています! – TheFrenchGuy

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); 
+0

return文がない場合、このメソッドはまったく何も行いません。 – aioobe

+0

@aioobeそうです。申し訳ありませんがタイプミス。 – flash

+0

そのようなものを一つずつ交換することはできません。 '.put(" $ myfile1 "、" $ myfile2 ")'をお持ちの場合はどうなりますか? – aioobe