동글동글이
3k
2019-06-25 15:52:49
14
2239

java eval 관련 질문


안녕하세요

java에서

int num = 0으로 변수를 초기화하고

넘어오는 데이터 값이 "[넘버] + 3" 이런식으로 넘어온다고 하면요

[넘버] 이부분을 replace 함수로 "num" 이런식으로 처리 해주고 싶습니다.

근데 저 String값을 변수에 담으면 "num+3"이라는 문자열이지 실제로 실행되지 않잖아요?

저 부분을 실제로 실행하려면 어떻게 해야 할까요?

자바스크립트에서 사용하는 eval함수 같은걸 사용하고 싶은건데요..


구글에서 좀 찾아보니

자바스크립트 엔진을 이용해서 하는 방법이 있던데

사칙연산 같은 기호에는 먹히는데 변수명은 선언이 안됐다구 오류메시지가 발생하네요

도움 부탁드립니다 ㅠ.ㅠ

0
  • 답변 14

  • aksjm2
    1k
    2019-06-25 16:04:23

    int num = 0;

    String testStr = "[넘버] + 3";

    String[] temp = testStr.split("\\+|\\-|\\*|\\/");

    System.out.println(temp[1]);


    // 정수형으로 처리.

    Integer.parseInt(temp[1]);

    // 사칙연산 로직 박으면 될 것 같은데요.

  • 동글동글이
    3k
    2019-06-25 16:20:07

    aksjm2

    정수형으로 처리하는 시점에

    testStr 에는 "num + 3" 이런 형태로 값이 있다는 전제기 때문에

    String 값 "num"에 대해서 Integer.parseInt를 하므로 Exception이 발생합니다

    변수 num에 접근을 못해요 ㅠ.ㅠ


  • Frudy
    7k
    2019-06-25 16:25:40 작성 2019-06-25 16:28:49 수정됨

    1. 넘어오는 데이터 값이 "[넘버] + 3" 이런식으로 넘어온다고 하면요

    2. [넘버] 이부분을 replace 함수로 "num" 이런식으로 처리 해주고 싶습니다.

    3. 근데 저 String값을 변수에 담으면 "num+3"이라는 문자열이지 실제로 실행되지 않잖아요?

    저 부분을 실제로 실행하려면 어떻게 해야 할까요?

    실제 코드좀 보여주실수있나요? 무슨말인지 잘 모르겠어요.


    1. String data = "num + 3";

    2. data = data.replace("num", "99");

    3. eval(data) = 99 + 3 + 102

    뭐 이런거를 원하시는건가요?

  • aksjm2
    1k
    2019-06-25 16:28:45

    동글동글이

    정수형으로 처리하는 부분은 뒤에 숫자 3만 진행하는데요.. split으로 잘라서요..

    temp[1] 에는 숫자부분만 남습니다.


  • 동글동글이
    3k
    2019-06-25 16:30:38

    Frudy 

    변수가 있어요

    int a = 2;

    int b = 3;

    int c = 4;

    DB DESC 컬럼에 담긴 값은 "a + b + c" 라는 식이 있는거에요

    DESC컬럼값을 가져와서 "a+b+c"라는 부분을 변수값을 넣어서 처리를 해가지고 2+3+4 = 9 란 값을 

    받아오고 싶은거에요


    자바스크립트에서 사용하는 eval이요 ㅠ ㅠ



  • 동글동글이
    3k
    2019-06-25 16:31:34

    Frudy 

    네 맞습니다 ㅠㅠ

  • 동글동글이
    3k
    2019-06-25 16:32:08

    aksjm2 

    저 숫자만 남으면 의미가 없어요..

    [넘버] 라는 문자열을 num이라는 변수값으로 바꾸고 싶은거에용

  • Frudy
    7k
    2019-06-25 16:32:52 작성 2019-06-25 16:33:28 수정됨

    아~ 이제야 이해가되네요.

    뭐 맘먹고 직접 만든다면 문자열계산기는 쉽게 만들 수 있을거같아요.

    근데 이게 남이만들어놓은 문자열 계산기가 있는지 모르겠네요.


    필요하시면 만들어볼까요?

    아, 아니에요 재밌어보여서 만들어보겠습니당

  • 동글동글이
    3k
    2019-06-25 16:33:53

    Frudy

    네 ㅠㅠ

    한번 만들어봐주실 수 있으신가용


  • Frudy
    7k
    2019-06-25 16:36:11

    어........................이미 누가 남이 만들어놓은게있군요.

    이야..저런코드는 또 첨봅니다.

  • 동글동글이
    3k
    2019-06-25 16:36:14

    aksjm2 

    네 저건 잘돌아가는데

    문제는 eval안에서 자바에서 선언한 변수를 사용을 못해요


  • 동글동글이
    3k
    2019-06-25 16:37:06

    Frudy 

    자바 1.6이상일 때 import해서 사용할 수 있는건데

    저건 자바스크립트 엔진으로 말그대로 진짜 eval을 사용하는거라서

    자바에서 선언한 변수값은 undefiled라고 오류가 발생합니다..

  • aksjm2
    1k
    2019-06-25 16:46:28

    import java.util.HashMap;

    import java.util.Iterator;


    import javax.script.ScriptEngine;

    import javax.script.ScriptEngineManager;

    import javax.script.ScriptException;


    public class Main {


    public static void main(String[] args) throws ScriptException {

    HashMap<String, Integer> dataMap = new HashMap<String, Integer>();

    dataMap.put("a", 0);

    dataMap.put("b", 2);

    dataMap.put("c", 3);

    ScriptEngineManager manager = new ScriptEngineManager();

    ScriptEngine engine = manager.getEngineByName("js");

    String testStr = "a+b+c";

    Iterator<String> keys = dataMap.keySet().iterator();

    while(keys.hasNext()) {

    String key = keys.next();

    testStr = testStr.replaceAll(key, dataMap.get(key)+"");

    }

    System.out.println(testStr);

    Object result = engine.eval(testStr);

    System.out.println(result);

    }


    }

    결과

    0+2+3

    5


  • 동글동글이
    3k
    2019-06-25 16:54:06
  • 로그인을 하시면 답변을 등록할 수 있습니다.