문제
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()
.
아이디어는 여기에서 빌렸습니다.문자열의 문자 발생
제휴하지 않습니다 StackOverflow