2012-06-13 3 views
-2

내가 자바 정규식에 흥미로운 질문 건너 온은 Is there a regular expression way to replace a set of characters with another set (like shell tr command)? 그래서 나는 다음과 같은 시도 : 나는 인쇄 할 수있는 경우 출력이 지금두 번째 인수가 정규식으로 사용되지 않는 이유는 무엇입니까?

   String a = "abc"; 
       a = a.replaceAll("[a-z]", "[A-Z]"); 

을 여기

   [A-Z][A-Z][A-Z] 

나는 컴파일러가 복용 생각 첫 번째 인수는 gegex이지만 두 번째 인수는 아닙니다.

이 코드 또는 다른 이유로 인해 문제가 있습니까?

+0

그 질문에 대한 대답은 매우 크고 명확한 없음»«입니다. 왜 그게 효과가 있다고 생각하니? – Joey

답변

4

replaceAll이 작동하는 방식입니다.

API를 참조하십시오

public String replaceAll(String regex, String replacement) 

지정된 교체로 지정된 정규 표현에 일치하는이 캐릭터 라인의 부분 캐릭터를 대체합니다.

+0

고맙습니다, 당신의 요지가 있습니다. 나는 신중하게 API를 조사해야했다. –

1

초 인수는 대문자 소문자를 설정하려면 API

0

에 따라 대체 얻을 것이다 간단한 문자열이며, String 클래스에서 사용할 수를 toUpperCase 기능이있다. tr 유틸리티와 동등한 기능을 위해 Java (Java 7까지)가 지원되지 않는다고 생각합니다.

대체 문자열은 보통 $n 시퀀스를 제외하고는 문자 그대로 사용됩니다. 여기서 n은 정규식에서 캡처 그룹의 번호를 나타냅니다. 그러면 일치 항목에서 캡처 한 문자열을 대체 문자열로 사용합니다.

+0

저는 소문자를 대문자로 변환하려고하지 않았습니다. 나는 단지 이런 식으로 정규 표현식이 어떻게 작동하는지 알고 싶었다. –

2

링크 된 질문에 대한 대답은 매우 명확합니다. 아니요. 따라서 이것은 놀랄 일이 아닙니다.

당신은 documentation에서 볼 수있는 두 번째 인수는 참으로 대체 사용되는 일반 문자열로 :

매개 변수 :

  • regex - 정규 표현하는 문자열에 일치 할 것임
  • replacement - 각 일치에 대해 대체 할 문자열
0

정규 표현식을 조건을 표현하는 방법으로 간주합니다 (즉,이 표현식과 일치하는 문자열). 이를 염두에두고, 당신이 묻는 것은 "내 문자열에서 일치하는 것을 ... 다른 조건으로 바꾸십시오."는 의미가 없을 것입니다.

지금 당신이 찾고있는 것을 이해하려고하면 문자 클래스간에 자동 매핑을 찾고 싶습니다 (예 : [a-z] -> [A-Z]).내가 아는 한이 존재하지 않습니다 그리고 당신은 그것을 문자열이 두 번째로 대체 될 것이다 패턴과 일치하는 경우

0
public String replaceAll(String regex, String replacement) 

첫째 인수는 정규 표현합니다 (forementionned를 toUpperCase() 제외)를 직접 작성해야 당신이

toUpperCase() 

방법을 사용하여 대문자로 소문자로 변환 할 경우 인수,

0

당신은 jtr으로 보일 것입니다. 사용 예 :

String hello = "abccdefgdhcij"; 
CharacterReplacer characterReplacer; 

try { 
    characterReplacer = new CharacterReplacer("a-j", "Helo, Wrd!"); 
    hello = characterReplacer.doReplacement(hello); 
} catch(CharacterParseException e) { 
} 

System.out.println(hello); 

출력 :

Hello, World! 
관련 문제