자바를마스터하장!
30
2020-05-09 19:14:31
4
241

java 문자와 숫자들이 섞인 String 을 토큰화 하는 방법


안녕하세요 고수님들 


String A = "100+100-348*932";

이런식으로 있을 때 , 


ArrayList<String> list = new ArrayList<String>();

여기 list에 [100,+,100,-,348,*,932] 이렇게 넣고 싶을때 어떻게 해야할까요? 


*단 숫자는 랜덤으로 정해지고, 연산 기호는 -, +, *중 하나가 랜덤으로 정해집니다

*반드시 끝과 끝은 숫자로 정해지고, 숫자와 숫자 사이에는 연산 한 개가 반드시 주어집니다. 


int a = 0;

        String str = "";

        StringTokenizer st = new StringTokenizer(A, "");

        while(st.hasMoreTokens())

        {

        String sm = st.nextToken();

        a = Integer.parseInt(sm);  // 이부분에서 sm이 +,*,-이면 안되니까 렉 걸리는거 같더라구요 ㅜ

        if(0 <= a && a <= 9)

        {

        str += sm;

        continue;

        }

        else

        {

        list.add(str);

        num = "";

        list.add(sm);

        }

}


제가 생각해서 이렇게 짜봤는데, 주석처리 한 부분이 +,-,* 경우 때문에

에러가 걸리더라구요 .. 고수님들 도움 요청합니다 

0
0
  • 답변 4

  • 봄을찾아서
    246
    2020-05-09 19:53:07

    정규표현식을 사용해보시면 쉽게 해결할 수 있어요.

    1
  • John Suhr
    2k
    2020-05-09 19:56:25 작성 2020-05-09 20:05:32 수정됨
    String str = "100+100-100*100";
    String[] arr = str.split("(?<=[+--/*])|(?=[+--*/])");

    +, -, *, /으로 자르되, 구분자를 소비하지 않는 '?='으로 split하시면 됩니다.

    1
  • zepinos
    19k
    2020-05-09 20:39:48

    정규식 한줄로 쉽게 가능하지만, chatAt 을 이용해 위치를 한 칸씩 이동하며 연산자를 찾아내는 식으로 해도 쉽게 할 수 있습니다.

    1
  • 자바를마스터하장!
    30
    2020-05-17 19:58:07

    정규표현식을 구글링 해보니까 방법을 찾았습니다 ! 감사합니다

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.