안드로이드용 계산기 프로그램을 만들고 있습니다.
허접하지만 어느정도 구현이 되었구요.
계산기 프로그램을 만드는 중에 정규식을 쓸 일이 있었습니다.
정규식을 이용하면서 많은 공부가 되었습니다.
String s = "3+12X9-4/2";
정규식을 이용해서 String에서 숫자와 사칙연산 기호를 분리하려고 합니다.
처음에 썼던 방식은 다음과 같습니다.
String regExp = "[^0-9]";
String[] operands = s.split(regExp);
숫자가 아닌 것들을 구분자로 해서 operands에 3, 12, 9, 4, 2를 넣었습니다.
사실 사칙연산에서 쓰인 '+', '-', 'X', '/' 를 구분자로 하고 싶었는데 '-'가 문제가 되었습니다.
String regExp = "[+-X/]";
위에서 처럼 하면 '-'기호가 문제가 되어 파싱이 안되더군요.
escape 문제인가 싶어서
String regExp = "[+\-X/]";
위의 방법으로 해봤는데 역시나 안되었습니다.
한참을 고민하다가 다른 시도를 해봤는데
String regExp = "[+\\-X/]";
String[] operands = s.split(regExp);
위에 있는 정규식으로 하니 숫자만 파싱이 되더군요.
생각해보니 \\는 \로 인식이 되어서 \\-는 \-로 알아들을테니
'-'기호 문제가 해결되었습니다.
String regExp = "(-|X|/|\\+)";
String regExp = "[-X/+]";
위에서처럼 해도 마찬가지로 파싱이 되었습니다.
============================<결론>=============================
String s = "3+12X9-4/2";
String regExp = "[^0-9]";
String[] operands = s.split(regExp);
위와 같이 하면 숫자만 파싱할 수 있다.
아래와 같은 정규식을 써도 숫자만 파싱할 수 있다.
String regExp = "[+\\-X/]";
String regExp = "(-|X|/|\\+)";
String regExp = "[-X/+]";