2014-09-27 1 views
6

Java 문자열에 일본어 문자가 포함되어 있는지 감지하려고합니다. 문자가 나는과 같이 문자열에있는 일본어 문자와 일치하는 정규 표현식을 사용하는 거라고 생각 문법적으로 정확한 문장을 형성하는 경우 나에게 중요하지 않기 때문에 :Java 문자열에서 일본어 문자를 검색합니다.

package de.cg.javatest; 

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class JavaTest { 

    public static void main(String[] args) { 
     String aString = "なにげない日々。"; 
     Pattern pat = Pattern.compile("[\\p{InHiragana}]"); 
     Matcher m = pat.matcher(aString); 
     System.out.println(m.matches()); // false 
    } 
} 

그러나, 인쇄 문은 항상 false을 보여줍니다. 나는 패턴을 변경하려고 시도했다.

[\\p{IsHiragana}] 
[\\p{InHiragana}]+ 

그리고 코드 포인트를 수동으로 입력했다. 내가 누락 된 것이 있습니까? 아니면 다른 접근 방식을 취해야합니까?

+2

일은 히라가나가 아닙니다. –

답변

4

Matcher.matches은 패턴이 전체 문자열과 일치하는 경우에만 true를 반환합니다. As Anonymous commented, not all character are Hiragana characters.

다음과 같이 패턴을 변경하면 히라가나가 있는지 확인할 수 있습니다.

Pattern pat = Pattern.compile(".*\\p{InHiragana}.*"); 

Matcher.find을 사용하면 패턴을 수정할 필요가 없습니다.

Pattern pat = Pattern.compile("\\p{InHiragana}"); // [..] is not needed. 
Matcher m = pat.matcher(aString); 
System.out.println(m.find()); // true 
+0

답변 해 주셔서 감사합니다. 아마도 'Pattern.matches'에 대한 설명에 더주의를 기울여야했을 것입니다. 'Matcher.find'는 내가 원했던 것입니다. – CannibalGorilla

+1

FYI, http://ideone.com/zyGIUm – falsetru

관련 문제