2013-05-09 5 views
-3

정규식을 처음 사용하는 이유는 무엇인가요? 특정 조건으로 문자열을 분할하는 것이지만 어떻게해야할지 모르겠다. 여기자바에서 regex를 사용하여 문자열 분할


내가 문자열이 +, -, *, \, (, ), =
에 의해 분할이 가능한가요 원하는 샘플/상태

String str = sum1=x+(5+a) 

Array[0] = sum1 
Array[1] = = 
Array[2] = x 
Array[3] = + 
Array[4] = (
Array[5] = 5 
Array[6] = + 
Array[7] = a 
Array[8] =) 

입니까?

+0

예는 매우 가능하지만, 당신이 배열을 왜 내가 이해 해달라고? 문자열 (배열 아님)이 있으면 string.split을 할 수 있습니까? 또한 숫자/비 숫자 분할 문자열 정규 표현식 –

+0

을 사용하여 문자열을 분할하고 싶을 것입니다. 그렇지 않으면 조작 순서를 원하지 않을 것입니다. 그렇지 않으면 틀린 나무를 짖고 있기 때문입니다 – sjr

+0

토큰을 만드는 시간이 들리네요. 그 (것)들을 분석하십시오. – squiguy

답변

1

경우 정말이 문자에 을 분할하고 싶지 않기 때문에 당신은 아마 look-around 메커니즘을 사용해야합니다 정규식을 사용해야하지만 과 같을 것이다 가능하다 또는 전에 이후.

String str = "sum1=x+(5+a)"; 
String[] array=str.replaceAll("\\s+","")//remove all spaces 
        .split("(?<=[+\\-*\\\\()=/])|(?=[+\\-*\\\\()=/])"); 
for (int i=0; i<array.length; i++) 
    System.out.println("Array["+i+"] = "+array[i]); 

출력 :

Array[0] = sum1 
Array[1] = = 
Array[2] = x 
Array[3] = + 
Array[4] = (
Array[5] = 5 
Array[6] = + 
Array[7] = a 
Array[8] =) 
+0

다른 방법으로 생각한 것 같습니다. 정규식을 사용하는 것보다 다른 방법입니까? – newbie

+0

@newbie이 간단한 토큰 화의 경우 정규식이면 충분합니다. 그러나 토큰을 정렬/생성하는 다른 방법을 고려해야하므로 문자열을 나중에 역으로 계산하는 것이 더 쉽습니다 (http://en.wikipedia.org/wiki/Reverse_Polish_notation)/[폴란드어 표기법] (http : /en.wikipedia.org/wiki/Polish_notation) – Pshemo

0

네, 정규식이 yourstring.split("[\+\-\*\\\(\)\=]")

+2

당신은 어떤 토큰을 분할 할 것인가? – Patashu

+0

예, 아마도 너비가 0 인 어설 션으로 나누는 것과 같이 캡처하지 않는 그룹에서 나눌 수 있습니다 – aaronman

관련 문제