2013-12-19 3 views
0

나는하기 위해 정규 표현식을 작성하려고 : 각 대문자 사이에 공백을 추가하는 방법은 무엇입니까?

  1. 각 대문자 사이에 공백을 추가합니다.
  2. 모든 숫자를 제거하십시오. ClassNameOne839, 나는 텍스트 싶어 :

나는 텍스트가 Class Name One

그것을 할 라이브러리 기능이 있습니다를? 또는 정규식?

+0

나는 거기에 대한 라이브러리가 있는지 의심 스럽다. 정규 표현식을 작성하려고하면 우리가 당신을 도울 수 –

+0

중복 가능한 http://stackoverflow.com/q/272633/2006839 – Lakshmi

+0

String s = MyDocumentFileIsHere; 문자열 textWithSpace = s.replaceAll ("(.) ([A-Z])", "$ 1 $ 2"); holder.titleTxt.setText (textWithSpace); – Faakhir

답변

4

이 같은 replaceAll() 통화의 조합을 사용할 수 있습니다

String text = "ClassNameOne839"; 
String cleanText = text.replaceAll("\\d+", "").replaceAll("(.)([A-Z])", "$1 $2"); 

첫 번째는 모든 숫자를 제거하고 String의 시작 부분이 아닌 모든 대문자 앞에 공백을 추가합니다. $1$2은 정규식의 그룹의 첫 번째 및 두 번째 그룹에 대한 참조입니다.

0

정규 표현식 [A-Z][a-z]+(?=[A-Z\s\b0-9])은 대문자와 공백 문자 또는 숫자가 뒤 따르는 대문자와 일치합니다. 간단하게 뒤에 공백 행에 각 결과를 인쇄하면 설정하고

편집 : 이것은 당연히 당신의 대문자 이름이 이상한 문자를 포함하지 않는 것이 주어, 사용이 같을 것입니다 :

Matcher matcher = Pattern.compile("[A-Z][a-z]+(?=[A-Z\s\b0-9])").matcher(input); 
while(matcher.find()) { 
    string = string + matcher.group(); 
} 
Sytem.out.println(string); 
0
String result = "ClassName399".replaceAll("\\d", "").replaceAll("([A-Z])", "$1 "); 

첫 번째 표현식은 문자열 (\\d)의 모든 정수를 감지하고 삭제되며, 두 번째는 (범위 연산자 []를 사용하여) 모든 대문자를 검색 한 다음 $1을 발견 무엇을 소요하고 뒤에 공백을 추가 그것.

정규 표현식에 대한 자세한 내용은 Java Pattern 클래스를 참조하십시오.

cleanText = StringUtils.join(StringUtils.splitByCharacterTypeCamelCase(in.replaceAll("\\d+", "")), " "); 

이 regexps '에보다 빠르게해야합니다이 하나를 시도 )

1
org.apache.commons.lang.StringUtils.splitByCharacterTypeCamelCase 

는 당신이 필요로하는 거의 모든 것을 않습니다.

관련 문제