Frage

In Perl verwende ich normalerweise die Transliteration, um die Anzahl der Zeichen in einer Zeichenfolge zu zählen, die mit einer Menge möglicher Zeichen übereinstimmen.Dinge wie:

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

würde die Anzahl der kyrillischen Zeichen in $a zählen.Wie im vorherigen Beispiel habe ich zwei Klassen (oder zwei Bereiche, wenn Sie es vorziehen), ich habe noch eine andere mit einigen weiteren Klassen:

$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}]);

Jetzt muss ich etwas Ähnliches in Java tun.Gibt es ein ähnliches Konstrukt in Java?Oder muss ich alle Zeichen durchlaufen und prüfen, ob sie zwischen den Grenzen jeder Klasse liegen?

Danke

War es hilfreich?

Lösung

habe nichts wie tr/// in Java gesehen.

Sie könnten so etwas verwenden, um alle Übereinstimmungen zu zählen, die tho:

generasacodicetagpre.

Andere Tipps

Für eine gute Ordnung:unter Verwendung der Java-Unicode-Unterstützung.

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;
}

Dies verwendet den vollständigen Unicode (wobei zwei 16 -Bit -Zeichen einen Unicode -Codepunkt darstellen. In Java hat das Klassencharakter bereits alles, was Sie benötigen.

Oder:

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

Hier \\P ist das Negativ von \\p{CYRILLIC} die kyrillische Gruppe.

Sie können versuchen, mit so etwas zu spielen:

generasacodicetagpre.

Die Idee wurde von hier aus geliehen: Einfache Weg zum ZählenZeichen Ereignisse in einer Zeichenfolge

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top