2013-11-18 6 views
2

Можно ли преобразовать String, такую ​​как 1 + 2, в целое число, равное 3?Преобразование строки «1 + 2» в целое число

Я знаю, что могу использовать valueOf(), чтобы получить значение отдельных номеров

String test1 = "1"; 
String test2 = "2"; 
int test3 = Integer.valueOf(test1); 
int test4 = Integer.valueOf(test2); 

int answer = test3 + test4; 
System.out.println(answer); 

но можно преобразовать «1 + 2» до 3 в одном шаге вместо двух?

+3

Нет, не со стандартными java-библиотеками. – svz

+0

Не с обычными библиотеками. Хотя, вы можете разбить строку на '', а затем просто добавить valueOf (split [0]) + valueOf (split [2]). –

+0

Это может быть полезно: http://stackoverflow.com/questions/2605032/using-eval-in-java – SimplyPanda

ответ

4

Java поставляется в комплекте с Rhino.

import javax.script.ScriptEngine; 
import javax.script.ScriptEngineManager; 
import javax.script.ScriptException; 

public class RhinoExample { 
    public static void main(String[] args) throws ScriptException { 
     ScriptEngineManager manager = new ScriptEngineManager(); 
     ScriptEngine rhino = manager.getEngineByName("JavaScript"); 

     Double result = (Double) rhino.eval("1 + 2"); 
     Integer i = result.intValue(); 
     System.out.println(i); 
    } 
} 
+0

У него две строки: '' 1 "' и '" 2 "'. «Носорог» справляется с этим? Ваш пример, похоже, предполагает, что 'rhino' ожидает одну строку с математическими операторами внутри строки. – nhgrif

+1

@rhgrif Rhino - полностью функциональная реализация JavaScript. Вы можете использовать ['put'] (http://tinyurl.com/lf55j6t) для создания переменных и обрабатывать их таким образом, иначе вы можете сделать' val1 + "+" + val2' перед вызовом 'eval'. – Jeffrey

+0

@Jeffrey Теперь это должно идти в общедоступном static void main? Или есть другой способ выбросить ScriptException из другого метода? – Schmidty15

0

Стандартные библиотеки java не позволяют вам это делать. Тем не менее, как Джефф Стори ответил here вы можете попробовать, как это:

ScriptEngineManager mg= new ScriptEngineManager(); 
ScriptEngine engine = mg.getEngineByName("js");   
Object result = engine.eval("1+2"); 

Однако, если вы не хотите использовать вышеупомянутый метод лучшее, что вы можете сделать это:

String test1 = "1"; 
String test2 = "2"; 
System.out.println((Integer.valueOf(test1)+Integer.valueOf(test2))); 
0
public void printStringSum(String s1, String s2) { 
    int i1 = Integer.valueOf(s1); 
    int i2 = Integer.valueOf(s2); 
    val = i1 + i2; 
    System.out.println(val); 
} 

Теперь, когда когда-либо именно в коде, который вы хотите сделать, что размещено в исходном коде, просто позвоните по этому методу:

printStringSum("1", "2"); 

Однако вы можете улучшить это, сделав метод ожидающим массив строк. Внутри тела метода выполните итерацию по строке, взяв значение и +=, доведя его до val, затем распечатав val в конце.

0

Если это необходимо по соображениям памяти, удостоверьтесь, что у вас есть это, по причинам отладки, особенно если test1 и test2 в конечном итоге являются своего рода пользователем.

String test1 = "1"; 
String test2 = "2"; 
System.out.println((Integer.valueOf(test1)+Integer.valueOf(test2))); 

Это работает хорошо

String test1 = "1"; 
String test2 = "2"; 
int answer = (Integer.valueOf(test1)+Integer.valueOf(test2)); 
System.out.println(answer); 

, если его действительно необходимо ограничить количество строк, и вы можете gaurentee, что test1 и test2 будут «1» и «2», а затем просто использовать :

System.out.println((Integer.valueOf("1")+Integer.valueOf("2"))); 
Смежные вопросы