2016-06-21 4 views
0

私は問題をできるだけ簡略化しました。 リテラルな数式を含む文字列を与えられた場合、マップから値を取る数値に文字を変換して同じ式を取得したいと考えています。 皆さんからの助けを借りて私のコードの下に掲載しました。私が欲しいものマップから数値でリテラル式を変換する

public class Prova { 
    public static void main(String[] argv) { 
     //mathematical expression 
     String expr = "(a*b)+(b/a)"; //(15*60)+(60/15) 
     //Map of numeric values 
     HashMap<String, Double> itemval = new HashMap(); 

     itemval.put("a", 15.0); 
     itemval.put("b", 60.0); 

     System.out.println("itemval: " + itemval); 
     System.out.println("expr: " + expr); 

     //convert literal expression numerically 
     char[] nc = expr.toCharArray(); 
     for (int t = 0; t < nc.length; t++) { 
      char pippo = nc[t]; 
      for (String key : itemval.keySet()) { 
       if (key.equals(pippo)) { 
        System.out.println("pippo: " + itemval.get(key)); 
       } 
      } 
      System.out.print(nc[t]); 
     } 
    } 
} 

は、事前に 感謝(15 * 60)+(15分の60)のような出力を得ることです...

+0

あなたが「」常に単一の文字になり、他の場所()*のBAB(のようなので、なしのもの)に表示されません、単にString.replaceAllを(使用していることを確認している場合) – Nadir

+0

これはあなたを助けるかもしれません: 'http:// stackoverflow.com/questions/7258538/free-java-library-for-evaluating-math-expressions' – Kartic

答えて

0

あなたは何をする代わりに、char配列を文字列で仕事ができます置換。

/* expr.split("") create an arrays of string. 
* Each String element is a character of the original string.  
*/ 
for (String s : expr.split("")) { 
    if (itemval.containsKey(s)) { 
     expr = expr.replaceAll(s, itemval.get(s).toString()); 
    } 
} 
System.out.println(expr); 

出力:(15.0 * 60.0)+(60.0/15.0)


あなたが.0を表示しないために、あなたはのNumberFormatを使用することができます番号をフォーマットする場合:

NumberFormat nf = NumberFormat.getNumberInstance(); 
for (String s : expr.split("")) { 
    if (itemval.containsKey(s)) { 
     expr = expr.replaceAll(s, nf.format(itemval.get(s))); 
    } 
} 

出力:(15 * 60)+(15分の60)

0
import java.util.HashMap; 
import java.util.Map; 

public class Prova { 
    public static void main(String[] argv) { 
     // mathematical expression 
     String expr = "(a*b)+(b/a)"; // (15*60)+(60/15) 
     // Map of numeric values 
     HashMap<String, Double> itemval = new HashMap(); 

     itemval.put("a", 15.0); 
     itemval.put("b", 60.0); 

     System.out.println("itemval: " + itemval); 
     System.out.println("expr: " + expr); 

     for (Map.Entry<String, Double> e : itemval.entrySet()) { 
      expr = expr.replaceAll(e.getKey(), String.valueOf(e.getValue())); 
     } 

     System.out.println(expr); 
    } 
} 

出力:

itemval: {b=60.0, a=15.0} 
expr: (a*b)+(b/a) 
(15.0*60.0)+(60.0/15.0) 
関連する問題