문제

In Perl,I 일반적으로 사용하는 음역의 수를 계산하고 문자와 일치하는 설정의 가능한 문자입니다.같은 것들:

$c1=($a =~ y[\x{0410}-\x{042F}\x{0430}-\x{044F}]
            [\x{0410}-\x{042F}\x{0430}-\x{044F}]);

계산 숫자의 키릴 문자$니다.으로 이전 예에서 나는 두 개의 클래스(또는 두 개의 범위에,당신이 선호하는 경우),나는 다른 몇 가지 이상의 클래스:

$c4=($a =~ y[\x{AC00}-\x{D7AF}\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{A960}-\x{A97F}\x{D7B0}-\x{D7FF}]
            [\x{AC00}-\x{D7AF}\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{A960}-\x{A97F}\x{D7B0}-\x{D7FF}]);

지금,나는 할 필요가 비슷한 일이 있습니다.이 있 유사한 구조에서 Java?이 필요 또는 반복을 통해 모든 문자,그리고 확인하면 그것은 사이의 한계 각 반?

감사

도움이 되었습니까?

해결책

은 Java의 tr///와 같은 것을 보지 못했습니다.

이런 일을 사용하여 모든 일치 항목을 셀 수 있습니다 :

Pattern p = Pattern.compile("[\\x{0410}-\\x{042F}\\x{0430}-\\x{044F}]", 
                            Pattern.CANON_EQ);
Matcher m = p.matcher(string);
int count = 0;
while (m.find())
    count++;
.

다른 팁

에 대한 좋은 순:를 사용하 Java 유니코드 지원합니다.

int countCyrillic(String s) {
    int n = 0;
    for (int i = 0; i < s.length(); ) {
        int codePoint = s.codePointAt(i);
        i += Character.charCount(codePoint);
        if (UnicodeScript.of(codePoint) == UnicodeScript.CYRILLIC) {
            ++n;
        }
    }
    return n;
}

이를 사용하는 유니코드(두 16 비트 문자를 나타낼 수 있습니다 Unicode"코드는 점이다." 에서 Java 클래스 문자입니다.UnicodeScript 은 이미 모든 것을 당신이 필요합니다.

또:

int n = s.replaceAll("\\P{CYRILLIC}", "").length();

\\P 은 부정적인 의 \\p{CYRILLIC} 키릴 문자 그룹입니다.

다음과 같이 재생하려고 할 수 있습니다 :

s.replaceAll( "[^\x{0410}-\x{042F}\x{0430}-\x{044F}]*([\x{0410}-\x{042F}\x{0430}-\x{044F}])?", "$1" ).length()
.

아이디어는 여기에서 빌렸습니다.문자열의 문자 발생

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top