2016-06-07 3 views
-1

다음 코드를 내 코드베이스에서 regex를 사용하여 바꾸려고합니다.자바 정규 표현식 복수 찾기 및 바꾸기

if(StringFunctions.isNullOrEmpty(employee.getName())){ 

//java code 
} 

새로운 코드가 있어야한다 :

If(StringUtils.isEmpty(StringUtils.trim(employee.getName()))){ 

//java code 
} 

나는 업데이트를 수행하기 위해 다음 코드를 작성했습니다.

String regEx = "StringFunctions.isNullOrEmpty(.*)"; 
String replacement = "StringUtils.isEmpty(StringUtils.trim$1)"; 
textFromFile.replaceAll(regEx,pattern); 

출력은 다음과 같습니다

If(StringUtils.isEmpty(StringUtils.trim(employee.getName())){) 

//java code 
} 

내 코드에서 무슨 일입니까 ??? 제발 도와주세요

+0

질문에 오타의 부부가, 예상 된 결과가 "만약"없습니다 "하는 경우로 시작 "replaceAll에서는 패턴이 아니지만 대체 코드 인 –

+0

은 실제로 얼마나 많은 괄호가 있는지 모르기 때문에 작동하지 않습니다 당신은 inside StringFunctions.isNullOrEmpty()를 가질 것입니다. –

답변

1

정규식에서 ()은 캡처 그룹입니다. 리터럴 패턴을 넣으려고했기 때문에 대신 캡처 그룹 만 넣었으므로 정규 표현식 패턴이 올바르지 않습니다.

올바른 정규식 패턴이다

"StringFunctions.isNullOrEmpty\\((.+)\\)" 

\\((.+)\\) 리터럴 닫기 괄호 뒤에 문자 오픈이어서 브래킷 (캡처) 1 또는 문자를 더 일치 의미한다.

테스트 :

String textFromFile = "if(StringFunctions.isNullOrEmpty(employee.getName())){}"; 
String regEx = "StringFunctions.isNullOrEmpty\\((.+)\\)"; 
String replacement = "StringUtils.isEmpty(StringUtils.trim($1))"; 
String output = textFromFile.replaceAll(regEx,replacement); 
System.out.println(output); 

입력 :

출력이
if(StringFunctions.isNullOrEmpty(employee.getName())){} 

:

if(StringUtils.isEmpty(StringUtils.trim(employee.getName()))){} 
+0

아래 코드는 실패합니다. – venkat

+0

if (! StringFunctions.isNullOrEmpty (employee.getName) &&! StringFunctions.isNullOrEmpty (employee.getEmailId)) – venkat

+0

@venkat보다 복잡한 솔루션이 필요한 경우 Regex 이외의 다른 것을 사용하여 구현해야 할 수 있습니다. – explv

관련 문제