2012-11-27 3 views
0

내가 만들고있는 알고리즘에 대해 특정 문자열을자를 필요가 있습니다. substring()을 사용하고 있지만 너무 복잡해져 실제로 제대로 작동하지 않습니다. 나는이 주제 how to cut string with two regular expression "_" and "."커팅 스트링 java

을 발견하고 split()로 사용하기로 결정하지만 항상 그래서이 코드는 나에게

java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0 
+ 
^ 

을 제공 I이 :이 자극 예외가 왜

 String[] result = "234*(4-5)+56".split("+"); 
     /*for(int i=0; i<result.length; i++) 
     { 
     System.out.println(result[i]); 
     }*/ 
     Arrays.toString(result); 

어떤 아이디어 ?

P. 이 문제를 해결하면 커팅 알고리즘과 전체 계산기 알고리즘을 게시 할 예정입니다 (계산기를 작성하기 때문에). 그것은 거 정말 늠름한 계산기를 할 수있다, 약속 : P

답변

3

+은 특별한 의미가 있습니다. 일반 문자로 취급하려면 백 슬래시로 이스케이프 처리해야합니다.

String[] result = "234*(4-5)+56".split("\\+"); 

다음은 정규식의 메타 문자입니다. 일반 문자로의 치료를 위해 당신은 백 슬래시

<([{\^-=$!|]})?*+.> 

refer here about how characters work in regex로 탈출한다.

2

+한다 (하나의 이상을 의미) 정규식 한정 기호를 그래서 split 방법으로 탈출해야합니다 :

String[] result = "234*(4-5)+56".split("\\+"); 
2

당신에게 String.split가 구분 기호로 regex 소요

String[] result = "234*(4-5)+56".split("[+]"); 

, 때문에, 그리고-이처럼 문자열을 분할한다 0은 regex의 메타 문자로, 1 or more의 반복을 의미하므로 bare을 정규 표현식에 사용하면 오류가 발생합니다.

문자 클래스에서 + 리터럴과 일치시킬 수 있습니다. character class에서 메타 문자와 다른 모든 문자는 특별한 의미를 잃어 버리기 때문입니다. hiephen(-)만이 특별한 의미를 가지며 range을 의미합니다.

2

기호 + 기호는 정규 표현식에서 의미가 있습니다. 즉 split은 매개 변수를 구문 분석합니다. 더하기 문자를 정규식으로 이스케이프해야합니다.

.split("\\+");