2012-02-07 2 views
0

문자열에^기호가 포함되어 있는지 확인하고 사용자에게 메시지가 표시되는지 확인하고 싶습니다.자바 문자열에서^문자 확인

감사

Pattern p = Pattern.compile("[a-z0-9 ]", Pattern.CASE_INSENSITIVE); 
Matcher m = p.matcher("StringGoesHere"); 
boolean b = m.find(); 

if (b){ 
    System.out.println("bad"); 
} else { 
    System.out.println("fine"); 
} 
+0

그럼, 궁금한 점은 무엇입니까? – simchona

+0

... 패턴에 추가하고'\ '로 이스케이프 처리하십시오. –

답변

15

정규식 당신이 정규식을 사용하는 열망이 있다면 바로 String.contains()

를 사용, 잔인한 수 있습니다, "\\^" 사용 \\ 인, 하나의 \를 제공합니다 ^ char의 특별한 의미를 깨기.

+2

String.indexOf (char)가 String.contains (CharSequence)보다 훨씬 빠르다는 것을 알게 될 것입니다. 단일 문자를 검색합니다. –

+1

@ TheRealBaumann : 마이크로 최적화. 나는 대부분의 컴파일러가 두 문을 똑같이 취급 할 것이라고 믿는다 [문자열은 상수가있는 리터럴이라고 가정한다]. 'contains()'가 더 읽기 쉽습니다. 기억 : 최적화는 컴파일러 용이며 가독성은 프로그래머를위한 것입니다. – amit

+1

contains의 자바 구현은 실제로 String.indexOf (CharSequence.toString())를 호출하므로 String에서 CharSequence 로의 캐스트를 처리하여 가장 일반적인 용도로 String으로 반환합니다. –

1
Pattern p = Pattern.compile("\\^"); 
+0

실제로 문자열 *의 시작과 일치합니다. –

+0

이스케이프 처리되지 않으면 "줄의 시작"이 아닌가요? –

+0

(이후 편집 됨, 이러한 주석은 더 이상 적용되지 않습니다.) 표현식은''^ "'then –

10

이유는 단지

String str = "StringGoesHere"; 
if(str.indexOf('^') != -1) 
{ 
    System.out.println("bad"); 
} 
else 
{ 
    System.out.println("fine"); 
} 
1

사실, 가장 간단한 대답은 될 수 없습니다 : 단지 문자 자체를 검색 정규 표현식을 사용하지 마십시오.

더 자세한 답변은 의 정규 표현식 구문에 대한 세부 정보 ( 탈출)를 참조하십시오.

charcter 클래스에서 ^첫 번째 기호 인 경우에만 특별합니다. [^a-z]a-z 제외한 모든 일치하는 동안 그래서 [a-z^]은 (^ 이후 첫 번째 문자가 부정처럼), a-z또는^의 일치합니다.

\을 사용하여 문자 집합을 벗어나지 않는 한 ^은 줄의 시작과 일치합니다. 자바 인라인 문자열의 경우, "\\^"으로 써야합니다.