2017-06-23 2 views
2
int[] buildCharFreqTable(string phrase){ 
    int[] tab = new int[Character.getNumericValue('z') - Character.getNumericValue('a') + 1]; 
    for (char c : phrase.toCharArray()) { 
     int x = getCharNumber(c); 
     if (x != -1){ 
      tab[x]++; 
     } 
    } 
    return tab; 
} 

Dies ist eine Funktion, die zählt, wie oft jedes Zeichen in einer Phrase erscheint. Aber ich verstehe nicht, die LinieCharacter.getNumericvalue in char Häufigkeitstabelle

int[] tab = new int[Character.getNumericValue('z') - Character.getNumericValue('a') + 1]; 

Was bedeutet diese Linie tun und warum haben wir

Character.getNumericValue('z') - Character.getNumericValue('a') + 1 

Vielen Dank im Voraus verwenden

+1

Es gibt keine Notwendigkeit, diese Methode zu verwenden. Was haben Sie davon? Haben Sie [die Dokumentation] (https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html#getNumericValue-char-) konsultiert? – VGR

Antwort

2

Diese Zeile ein Array zu erstellen versucht, die hat einen Index für jedes Zeichen 'a' bis 'z'. Im Unterschied zu Unicode, das Java für andere Zeichen verwendet, codiert Java alle Varianten englischer Buchstaben mit denselben Zahlen. 'A' und 'a' entsprechen jeweils 10, 'B' und 'b' entsprechen jeweils 11 und so weiter. Das heißt, um jedes Zeichen im englischen Alphabet unabhängig von der Groß-/Kleinschreibung zu zählen, können wir ein Array mit einem Index pro Zeichen erstellen und den Wert des Index für jedes Zeichen, das wir sehen, erhöhen. Die Linie

int[] tab = new int[Character.getNumericValue('z') - Character.getNumericValue('a') + 1]; 

Erzeugt ein neues Array der Größe Value of 'z' - Value of 'a' + 1. In Java erhalten englische Zeichen alphabetisch sequenzielle numerische Werte, also ist "a" 10 und "z" ist 35. Dies macht die Größe unseres Arrays 35-10+1 oder 26, die Anzahl der Buchstaben im englischen Alphabet. Dies ist nur eine anpassungsfähigere Möglichkeit, dieses Array zu erstellen, als einfach ein Array der Größe 26 zu erstellen. Was, wenn Sie die Zeichen "0" bis "9" in einer Zeile anstatt "a" und "z" zählen möchten? Man könnte einfach 'a' und 'z' auf '0' und '9' setzen oder sie als Variablen übergeben.

Verwandte Themen